在尝试在python中实现可观察模式时遇到了一个问题。他是我的代码:
class Observer:
"""
Classe destinée à définir les modalités d'observation des évènements
"""
_observers = []
def __init__(self):
self._observers.append(self)
self._observables = {}
def observe(self, event_name, callback):
self._observables[event_name] = callback
class Event():
"""
Liste des évènements observables
"""
def __init__(self, name, *args, autofire = True):
self.name = name
# self.data = [arg1, arg2]
self.arg = [a for a in args]
# self.arg = args
# self.arg2 = arg2
if autofire:
self.fire()
def fire(self):
print(self.arg)
for observer in Observer._observers:
if self.name in observer._observables:
observer._observables[self.name](self.arg)
class Room(Observer):
""" Test de l'observation d'un évènement"""
def __init__(self):
Observer.__init__(self) # Observer's init needs to be called
print("La chambre est prête.")
def someone_arrived(self, who, place):
print(who, "est arrivé à", place, "!")
def main():
room = Room()
room.observe("someone arrived", room.someone_arrived)
Event("someone arrived", "Tof", "Toulouse")
if __name__ == "__main__":
main()
问题出在__init__
类的Event()
函数中。当我尝试使用*args
传递多个参数时,它总是让我回过头来,而当我只放置args
时,一切都很好。
如果有人可以尝试并给我一些东西看一下或向我解释它为什么会出错,将不胜感激!
谢谢!