Найти - Пользователи
Полная версия: Вызвать статические методы некоторых классов при запуске
Начало » Python для новичков » Вызвать статические методы некоторых классов при запуске
1 2 3
Soteric
При запуске программы некоторым классам нужно подписаться на некоторые события. Это можно сделать вызвав при запуске методы этих классов. Проблема в том, что перечень классов, которые нуждаются в подписке, заранее неизвестен. Хотелось бы узнать есть ли какой-то механизм запуска определенного метода во всех классах проекта или есть какой-то специальный метод класса, который срабатывает в момент запуска программы. Т.е. например:
from misc.event import Event

class Dummy(object):
@classmethod
def initialize(cls):
Event.subscribe('event_name', cls.__method_to_invoke)

@staticmethod
def __method_to_invoke():
# Сделать всем хорошо
Метод initialize хотелось бы вызывать при старте.
dimabest
читай про паттерн Observer
Soteric
Прочитал. В примерах паттерна Observer создаются экземпляры класса, которые подписываются на события. В моем случае экземпляра нет. Например диалоговое окно, которое должно быть создано только по событию.
regall
может вам нужен не
@classmethod
а
@staticmethod
?
Soteric
А какая разница? staticmethod тоже не дернется до тех пор, пока я явно не обращусь к классу. В C# например можно было воспользоваться классами Assembly и MethodInfo, опросив все классы сборки по имени метода и вызвав все Initialize() какие будут найден. В питоне есть что-то подобное? Или опять же, может быть есть какой-то специальный метод класса, который вызывается при запуске программы, но до обращения к методам класса?
Soteric
Как это может помочь?
Александр Кошелев
Soteric
Как это может помочь?
Никак. Кому-то просто захотелось по-придираться.

Если бы я решал подобную задачу, то завел бы базовый класс для подобных типов, у которого сделал бы мета-класс, в котором регистрировал всех наследников и вызывал бы какую-то логику их обработки после загрузки “системы”.
regall
Daevaorn
Никак. Кому-то просто захотелось по-придираться.
Нет, просто изначально не так понял задачу.
dimabest
Soteric
Прочитал. В примерах паттерна Observer создаются экземпляры класса, которые подписываются на события. В моем случае экземпляра нет
Подписывай классы. В чем проблема-то? :-)
Вместо методов экземпляра будут вызыватся методы класса.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB