Python 自动检测发送者的事件系统?
以下是我当前的活动系统:Python 自动检测发送者的事件系统?,python,events,python-3.x,event-handling,Python,Events,Python 3.x,Event Handling,以下是我当前的活动系统: class Event(set): def fire(self, sender, **event_args): for handler in self: handler(sender, *event_args) 其用法如下: class Warrior: e_death = Event() def __init__(self, name): self.name = name de
class Event(set):
def fire(self, sender, **event_args):
for handler in self:
handler(sender, *event_args)
其用法如下:
class Warrior:
e_death = Event()
def __init__(self, name):
self.name = name
def death_printer(sender, **event_args):
print(sender.name, 'has died!')
Warrior.e_death.add(death_printer)
warrior = Warrior('My Warrior')
warrior.e_death.fire(warrior)
我想解决的“问题”在最后一行:warrior.e_death.fire(warrior)
。我不想重复对象的名称,因此我可以只执行warrior.e_death.fire()
,而不必手动将发送方
传递给事件。
这在Python中可能吗?我会更改事件类,以便它在实例化时接受并存储
sender
的值:
class Event(set):
def __init__(self, sender, *args, **kwargs):
super(Event, self).__init__(*args, **kwargs)
self.sender = sender
def fire(self, **event_args):
for handler in self:
handler(self.sender, *event_args)
现在在Warrior的init中,而不是在类级别实例化:
class Warrior()
def __init__(self, *args, **kwargs):
super(Warrior, self).__init__(*args, **kwargs)
self.e_death = Event(self)
现在您可以执行
warrior.e_death.fire()
,但这会创建大量额外的事件
实例!而不是只使用一个,然后将发送方
作为参数传递给函数