2013-05-01 92 views
1

我收到了一些傳遞Observable實例的奇怪行爲。它似乎退化成一個清單,我無法弄清楚爲什麼。在模塊之間傳遞用戶定義的問題參數

patterns.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 

views.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) 

routing.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 

最後一行是紫紅色(表示有一個錯誤,我認爲)

+0

我仍然不清楚爲什麼這已被低估。 – 2013-05-01 14:07:44

+0

你在期待什麼? – Neal 2013-05-01 14:11:45

回答

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 

那麼輸出將是對象的ID,而不是self.observers屬性的值。

+0

我會接受這個答案(一旦我明白如何做到這一點)。 – 2013-05-01 15:36:36

+0

謝謝你的回答。我對使用Django感到憤怒,我剛剛使用Ajax,並沒有想到直接從瀏覽器地址框中傳遞URL。沒有錯誤讓我困惑了好幾個小時。 – 2013-05-01 15:39:04