字典中的python对象

字典中的python对象,python,dictionary,Python,Dictionary,我试图将对象candlebuffer保存在字典candlebuffer中,但它给出了以下错误。我在挣扎;我的语法有什么错误 class Observer: def __init__(self): self.listeners = [] def attach(self, listener): if not listener in self.listeners: self.listeners.append(listen

我试图将对象
candlebuffer
保存在字典
candlebuffer
中,但它给出了以下错误。我在挣扎;我的语法有什么错误

    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)

这不是导致错误的原因,但您需要使用:创建字典

self.candlebuffer = { 0 : candle }
它在格式键:value上


我猜您正在创建一个烛台,而没有在代码的其他地方提供参数。

这不是导致错误的原因,但您需要使用:创建一个字典

self.candlebuffer = { 0 : candle }
它在格式键:value上


我猜您正在创建一个CandleBuffer,而没有在代码中的其他地方提供参数。

既然您已经确认了我的怀疑,您必须将另一个参数传递给构造函数,并使用字典而不是集合:

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)

既然您已经证实了我的猜测,那么您必须将另一个参数传递给构造函数,并使用字典而不是集合:

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)

您没有向我们显示实际导致错误的代码。堆栈跟踪告诉您它发生的确切行。请给出整个堆栈跟踪,而不仅仅是错误消息,并包括错误的实际行。如果是2.x,则您的类应继承自
对象
,以支持“新”样式的类。你能给我看更多的代码吗?i、 这个错误确实来自这个执行行:candleBuffer=candleBuffer()。您没有向我们展示实际导致错误的代码。堆栈跟踪告诉您它发生的确切行。请给出整个堆栈跟踪,而不仅仅是错误消息,并包括错误的实际行。如果是2.x,则您的类应继承自
对象
,以支持“新”样式的类。你能给我看更多的代码吗?i、 这个错误确实来自这个执行行:candleBuffer=candleBuffer()。当我纠正了“:”引发的问题时,它确实有效,并且我将一个参数“5”传递给构造函数,但是我没有得到它,它在哪里使用?我知道你解释这一点并不简单……我在上面又添加了一些代码,CandlePrinter和CandleBuffer看起来很像我,为什么缓冲区需要传递一个参数?@matel,因为你在构造函数的签名中指出:
self
引用了实例,而
candle
是另一个强制参数。正如@xr09所指出的,您可以使用
def\uuuu init\uuuuuuuu(self,candle=None)设置一个默认值:
。感谢这对我来说有点复杂,我是新手,不具备所需的所有基础。当我纠正了以下问题时,它确实起作用:“引发了,而且我将参数“5”传递给构造函数,但我不明白它,在哪里使用?我知道你解释这一点并不简单……我在上面又添加了一些代码,CandlePrinter和CandleBuffer看起来很像我,为什么缓冲区需要传递一个参数?@matel,因为你在构造函数的签名中指出:
self
引用了实例,而
candle
是另一个强制参数。正如@xr09所指出的,您可以使用
def\uuuu init\uuuuu(self,candle=None)设置默认值:
。感谢这一点,这对我来说有点复杂,我是新手,还没有所需的所有基础