Задержка статической инициализации члена класса - PullRequest
1 голос
/ 26 октября 2011

У меня есть этот (пример) код:

init()

class A:
    foo = bar()

    def __init__(self):
        print(A.foo)

Проблема в том, что функция bar() отказывается работать, если сначала не был вызван init().Какое хорошее решение Pythonesque для этой проблемы?


В моей конкретной ситуации init() является сторонним и не может быть адаптировано и вызывается в файле, отличном от определенного A.

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

Вы можете заключить вызов в bar() в другую функцию, которая также будет гарантировать, что init() был вызван.

0 голосов
/ 26 октября 2011

Как это?

class A:
    foo = None
    def __init__(self):
        if A.foo is None:
             A.foo = bar()
        print(A.foo)

Вы также можете переместить оператор if в A.__new__(), если вы не уверены, что будет вызван A.__init__() (например, при откреплении объекта A до явноговызывая его конструктор).

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