带*args的Python观察者模式不起作用

2024-05-16 11:14:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试用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()

问题在于Event()类的__init__函数。当我尝试用*args传递多个参数时,它总是会让我返回问题,而当我只使用args时,一切都很好。你知道吗

如果有人可以尝试一下,给我一些东西看看或解释为什么它的错误,这将不胜感激!你知道吗

谢谢!你知道吗


Tags: nameinselfeventinitdefargargs