1

Observable のインスタンスを渡すと、奇妙な動作が発生します。リストに退化しているようで、その理由がわかりません。

パターン.py

class Observable():

    def __init__ (self):
        self.observers = []

    def addObserver(self, observer):
        self.observers.append(observer)

    def notifyObservers(self, event):
        for observer in self.observers:
            observer.observeEvent(event)

    def __str__(self):
        print self.observers

ビュー.py

from patterns import Observable

def loadData ():
    '''  helper function
    '''

    print "l1"
    avoidTollObservable = Observable ()

       dataLocation = os.path.join(os.path.dirname(__file__), 'DATA', "links.dat").replace('\\','/')

    print "reading edges"
    edgesDict = routing._readNetworkDataFile (dataLocation, avoidTollObservable)

ルーティング.py

from patterns import Observable

def _readNetworkDataFile ( absFilePath , avoidTollObservable):

    print "debug:" 
    print avoidTollObservable
    print "debug end"

プログラムは以下を生成します。

>
> debug:
> []
> [01/May/2013 08:40:49] "GET /route/-110884.64901689/6782501.6151699/-250884.64901689/7299908.890599588/?_=1367415648664 HTTP/1.1" 500 11571

最後の行は藤色です(エラーがあることを示していると思います)

4

1 に答える 1

1

これを行うとき:

print avoidTollObservable

あなたが基本的にやっていることは、Observableオブジェクト__str__()メソッドを呼び出すことです

def __str__(self):
    print self.observers # In your code this is declared as a list

self.observers空のリスト(初期化方法)であるため、出力は になります[]。値を追加するself.observers前に項目を追加するとrouting._readNetworkDataFile、 の値はprint avoidTollObservable空のリストにはなりません。

次のように変更__str__()する場合:

def __str__(self):
    print 'Object ID' + self

self.observersその場合、出力は属性の値ではなく、オブジェクトの ID になります。

于 2013-05-01T14:46:16.477 に答える