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

Popular posts from this blog

searchKeyword not working in AngularJS filter -

sequelize.js - Sequelize: sort by enum cases -

user interface - how to replace an ongoing process of image capture from another process call over the same ImageLabel in python's GUI TKinter -