Могу ли я вызвать внутренний класс из метода класса внешнего класса? - PullRequest
0 голосов
/ 09 июня 2018

Я работаю с библиотекуasticsearch_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 голосов
/ 09 июня 2018

Я работаю с библиотекой 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 для создания индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...