我可以从外部类的类方法调用内部类吗?



我正在使用elasticsearch_dsl库,但这个问题广泛适用于python。

我想定义一个创建名为test__YYYY-MM-DD的索引的方法

class Test(DocType):
content = Text()
class Meta:
index = 'test'
@classmethod
def create_index(cls):
now = datetime.datetime.utcnow().strftime('%Y-%m-%d')
test = Index('{}__{}'.format(cls.Meta.index, now))
^^^ this does not exist
test.doc_type(cls)
test.create()

我怎样才能进入index存在于Meta内部班级的领域?

我正在使用elasticsearch_dsl库,但这个问题广泛适用于Python。

实际上,它并不广泛适用于Python。在普通类中,访问cls.Meta.index在这里可以像往常一样工作。DocType有一个元类,用于从类命名空间中删除Meta。 如果我正确阅读了源代码,您正在寻找的属性应该在cls._doc_type.index.

>>> class Example(DocType):
...     class Inner:
...         index = 'inner_var'
...     class Meta:
...         index = 'meta_var'
...     @classmethod
...     def foo(cls):
...         print(cls.Inner.index)
...         print(cls._doc_type.index)
...         
>>> Example.foo()
inner_var
meta_var

注意:DocTypeOptions实例上存在前导下划线,即_doc_type,建议私有 API。也许您应该寻找一个公共 API 来创建索引。

最新更新