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

时间:2018-06-08 23:34:51

标签: python python-2.7 elasticsearch

我正在使用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字段?

1 个答案:

答案 0 :(得分:3)

  

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

实际上,它并不广泛适用于Python。在普通课程中,访问cls.Meta.index只会照常工作。 DocType has a metaclass removes Meta from the class namespace。如果我正确阅读了源代码,那么您应该在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来代替创建索引。