2013-04-07 87 views
0

我試圖在字典candlebuffer中保存對象candle,但它給了我下面的錯誤。我掙扎着;我的語法有什麼不正確?python在字典中的對象

class Observer: 
    def __init__(self): 
     self.listeners = [] 

    def attach(self, listener): 
     if not listener in self.listeners: 
      self.listeners.append(listener) 

    def notify(self, event): 
     for listener in self.listeners: 
      listener.update(event) 


class CandleGenerator(Observer): 
    def __init__(self,freq): 
     Observer.__init__(self) 
     self.freq = freq 
     self.candle = Candle() 

    def update(self,tick): 
     self.candle.addTick(tick,self.freq) 
     if keyfunc(self.candle.timestamp,self.freq) != self.candle.ref_timestamp: 
      self.notify(self.candle) 
      self.candle = Candle() 

class CandlePrinter: 
    def update(self, candle): 
     print "Bougie>>>>>> freq: %s %s %s %s %s %s %s %s %s " % (candle.freq,candle.last_price,candle.volume, candle.timestamp, candle.ref_timestamp, candle.open_price,candle.high_price,candle.low_price, candle.last_price) 

class CandleBuffer: 
    def __init__(self,candle): 
     self.candlebuffer={0: candle} 
    def update(self,candle): 
     self.candlebuffer[candle.timestamp]= candle 
     print self.candlebuffer 


print('begin') 

tickGenerator = TickGenerator() 
candleGenerator1 = CandleGenerator(1) 

candlePrinter = CandlePrinter()  
candleBuffer = CandleBuffer(5)  

tickGenerator.attach(candleGenerator1) 
candleGenerator1.attach(candlePrinter) 
candleGenerator1.attach(candleBuffer) 

tickGenerator.generate() 

它提供了以下的輸出:

TypeError: __init__() takes exactly 2 arguments (1 given) 
+1

您還沒有向我們展示,實際上導致該錯誤的代碼。堆棧跟蹤會告訴您它發生的確切路線。請給*整個*堆棧跟蹤,而不僅僅是錯誤消息,並且包含帶有錯誤的實際行。 – 2013-04-07 13:44:34

+0

如果這是2.x,那麼你的類應該從'object'繼承來支持「new」風格的類。你能展示更多的代碼嗎?即使用該類的代碼。 – 2013-04-07 13:49:20

+0

錯誤來自這個執行線的確如此:candleBuffer = CandleBuffer() – matel 2013-04-07 13:50:07

回答

2

既然你已經證實了我的懷疑,你必須通過另外一個參數的構造函數,而不是使用一組詞典:

class CandleBuffer(): 
    def __init__(self,candle): 
     self.candlebuffer={0 : candle} 
    def update(self,candle): 
     self.candlebuffer[candle.timestamp]= candle 

# ... 
candleBuffer = CandleBuffer(a_candle) 
candleBuffer.update(another_candle) 
+0

它確實工作時,我糾正了問題與「:」提出,我也傳遞了一個參數「5」的構造函數,但我沒有得到它,在哪裏它被使用了嗎?我知道這不是直截了當的你解釋這... – matel 2013-04-07 13:59:56

+0

我還在上面添加了一些代碼,CandlePrinter和CandleBuffer看起來類似於我,爲什麼緩衝區需要一個參數來傳遞? – matel 2013-04-07 14:01:36

+0

@matel因爲你在構造函數的簽名中指出它:'self'是指實例,'candle'是另一個強制性參數。正如@ xr09指出的那樣,你可以用'def __init __(self,candle = None):'來設置默認值。 – 2013-04-07 14:05:58

1

這是不是你需要用什麼導致你的錯誤,但是:創建一個字典。

self.candlebuffer = { 0 : candle } 

它的格式鍵:值。

我猜你正在創建一個CandleBuffer而沒有在代碼中的其他地方給出一個參數。