2013-04-06 2 views
3

Почему переменная freq не определена в обновлении метода? Я вызываю метод свечи на init, и этот метод содержит freq?python undefined variable

class candle: 
    def __init__(self): 
     self.freq = None 
     self.open_price = None 
     self.high_price = None 
     self.low_price = None 
     self.last_price = None 
     self.volume = 0 

    def addTick(self,tick): 
     if self.open_price is None: 
      self.open_price = tick.price 
     if self.high_price is None or tick.price >self.high_price: 
      self.high_price = tick.price 
     if self.low_price is None or tick.price <self.low_price: 
      self.low_price = tick.price 
     self.last_price = tick.price 
     self.volume = self.volume +1 


    def update(self,tick): 
     self.candle.addTick(tick) 
     if keyfunc(current_time,freq) != reference_timestamp[freq]: 
      self.notify(self.candle) 
      self.candle = candle() 

ответ

2

Там нет в Python нет неявного self, вы должны быть явным, когда доступ к переменным-членам.

if keyfunc(current_time,freq) != reference_timestamp[freq]: 

должен быть

if keyfunc(current_time, self.freq) != reference_timestamp[self.freq]: 

не уверен, где reference_timestamp определяется, предполагая, что это глобальная.

+0

Еще одна вещь, почему self.freq и self.candle.freq - то же самое? self.candle.freq имеет смысл, но почему этот ярлык self.freq возможен? – matel

+0

Если они действительно одинаковы, то 'self.candle' должен быть ссылкой на' self'. Это не ярлык. – chepner

2

Вы пытаетесь получить доступ к локальной переменной (которая не определена в этой области) вместо атрибута экземпляра класса. Попробуйте self.freq вместо freq.