0

作成中のゲームでオブザーバー パターンを使用してテストしています。しかし、私はそれにいくつかの問題を抱えています。私のコードとエラーは以下のとおりです。誰か助けてもらえますか?

エラー:

File "C:\Users\Administrator\PycharmProjects\untitled\Level.py", line 112, in update
    w.update()
  File "C:\Users\Administrator\PycharmProjects\untitled\Entity.py", line 13, in update
    self.notifyObservers()
  File "C:\Users\Administrator\PycharmProjects\untitled\Observable.py", line 15, in notifyObservers
    observer.update(self)
TypeError: unbound method update() must be called with Player instance as first argument (got WorldController instance instead)

レベルファイル:

self.world = [WorldController()]
for w in self.world:
            w.update()

エンティティ ファイル:

class WorldController(Observable):
    def __init__(self):
        super(Observable, self).__init__()
        self._observers = []

    def update(self):
        self.addObserver(Player)
        self.notifyObservers()

class Entity(Observer, pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

class Player(Entity, Observer):
    def __init__(self, x, y):
        super(Observer, self).__init__()
        Entity.__init__(self)
    def update(self, observable):
        print "works!"

観察可能なファイル:

class Observable(object):
    def __init__(self, **kwds):
        super(Observable, self).__init__(**kwds)
        self._observers = []
    def addObserver(self, observer):
        if not observer in self._observers:
            self._observers.append(observer)
    def removeObserver(self, observer):
        try:
            self._observers.remove(observer)
        except ValueError:
            pass
    def notifyObservers(self):
        for observer in self._observers:
            observer.update(self)

class Observer(object):
    def __init__(self, **kwds):
        super(Observer, self).__init__(**kwds)
    def update(self, observable):
        pass
4

1 に答える 1

1
class WorldController(Observable):
    def __init__(self):
        super(Observable, self).__init__()
        self._observers = []

    def update(self):
        self.addObserver(Player)
        self.notifyObservers()

次のようにする必要があります。

class WorldController(Observable):
    def __init__(self):
        super(Observable, self).__init__()
        self._observers = []

    def update(self):
        self.addObserver(Player())
        self.notifyObservers()

それ以外の場合は、 Player.update(self) を呼び出すときに、 Player クラスのインスタンス メソッドではなく静的メソッドを呼び出しています。

于 2013-03-02T18:33:00.633 に答える