2013-05-01 57 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