Есть статический конструктор или статический инициализатор в Python?
Есть ли такая вещь, как статический конструктор в Python?
Как реализовать статический конструктор в Python?
Вот мой код... __init__
не срабатывает, когда я вызываю приложение вроде этого. __init__
не является статическим конструктором или статическим инициализатором.
App.EmailQueue.DoSomething()
Мне нужно вызвать его так, чтобы каждый экземпляр класса App:
App().EmailQueue.DoSomething()
Вот мой класс:
class App:
def __init__(self):
self._mailQueue = EmailQueue()
@property
def EmailQueue(self):
return self._mailQueue
Проблема с вызовом __init__
каждый раз заключается в том, что объект App воссоздается. Мой "настоящий" класс App довольно длинный.
Ответы
Ответ 1
Подсказка: все, что ссылается на self
, потребует создания экземпляра класса. Вы можете сделать это следующим образом:
class App:
email_queue = EmailQueue()
App.email_queue.DoSomething()
Но давай, это похоже на много пуха. Я с SLaks, просто инициализирую его вне класса. Кроме того, вы можете посмотреть одноэлементный шаблон.
Ответ 2
Существует принципиальное различие между статическими и динамическими языками, которые не всегда кажутся в первую очередь.
В статическом языке класс определяется во время компиляции, и все хорошо и устанавливается в бетоне до того, как программа когда-либо запускается.
В динамическом языке класс фактически определен во время выполнения. Как только интерпретатор разбирает и запускает все эти классы и инструкции def, запускается эквивалент статического конструктора. Определения классов выполняются в этой точке.
Вы можете поместить любое количество утверждений в любом месте тела класса, и они фактически являются статическим конструктором. Если вы хотите, вы можете поместить их все в функцию, которая не принимает self
в качестве параметра и вызывает эту функцию в конце класса.
Ответ 3
Вам нужно создать экземпляр своего приложения, а затем использовать его:
myApp = App()
myApp.EmailQueue.DoSomething()