字典中的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)设置默认值:
。感谢这一点,这对我来说有点复杂,我是新手,还没有所需的所有基础