Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 5, 2010 15:26:31

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

При запуске программы некоторым классам нужно подписаться на некоторые события. Это можно сделать вызвав при запуске методы этих классов. Проблема в том, что перечень классов, которые нуждаются в подписке, заранее неизвестен. Хотелось бы узнать есть ли какой-то механизм запуска определенного метода во всех классах проекта или есть какой-то специальный метод класса, который срабатывает в момент запуска программы. Т.е. например:

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 хотелось бы вызывать при старте.



Отредактировано (Ноя. 5, 2010 16:09:01)

Офлайн

#2 Ноя. 5, 2010 16:15:26

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

читай про паттерн Observer



Офлайн

#3 Ноя. 5, 2010 16:37:54

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

Прочитал. В примерах паттерна Observer создаются экземпляры класса, которые подписываются на события. В моем случае экземпляра нет. Например диалоговое окно, которое должно быть создано только по событию.



Офлайн

#4 Ноя. 5, 2010 17:21:14

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

может вам нужен не

@classmethod
а
@staticmethod
?



Офлайн

#5 Ноя. 5, 2010 17:26:49

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

А какая разница? staticmethod тоже не дернется до тех пор, пока я явно не обращусь к классу. В C# например можно было воспользоваться классами Assembly и MethodInfo, опросив все классы сборки по имени метода и вызвав все Initialize() какие будут найден. В питоне есть что-то подобное? Или опять же, может быть есть какой-то специальный метод класса, который вызывается при запуске программы, но до обращения к методам класса?



Офлайн

#6 Ноя. 5, 2010 18:19:05

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

Офлайн

#7 Ноя. 5, 2010 19:17:43

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

Как это может помочь?



Офлайн

#8 Ноя. 5, 2010 19:28:39

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

Soteric
Как это может помочь?
Никак. Кому-то просто захотелось по-придираться.

Если бы я решал подобную задачу, то завел бы базовый класс для подобных типов, у которого сделал бы мета-класс, в котором регистрировал всех наследников и вызывал бы какую-то логику их обработки после загрузки “системы”.



Офлайн

#9 Ноя. 5, 2010 23:15:49

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

Daevaorn
Никак. Кому-то просто захотелось по-придираться.
Нет, просто изначально не так понял задачу.



Офлайн

#10 Ноя. 5, 2010 23:43:12

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызвать статические методы некоторых классов при запуске

Soteric
Прочитал. В примерах паттерна Observer создаются экземпляры класса, которые подписываются на события. В моем случае экземпляра нет
Подписывай классы. В чем проблема-то? :-)
Вместо методов экземпляра будут вызыватся методы класса.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version