python - Event system that automatically detects sender? -
here's current event system:
class event(set): def fire(self, sender, **event_args): handler in self: handler(sender, *event_args) which used so:
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) the "problem" want solve on last line: warrior.e_death.fire(warrior). not repeat name of object, warrior.e_death.fire() instead of having manually pass sender event. possible in python?
i change event class accepts , stores value sender on instantiation:
class event(set): def __init__(self, sender, *args, **kwargs): super(event, self).__init__(*args, **kwargs) self.sender = sender def fire(self, **event_args): handler in self: handler(self.sender, *event_args) and instantiate in init warrior, rather @ class level:
class warrior() def __init__(self, *args, **kwargs): super(warrior, self).__init__(*args, **kwargs) self.e_death = event(self) now can warrior.e_death.fire().
Comments
Post a Comment