2013-04-06 88 views
3

爲什麼變量freq未在方法更新中定義? 我在init上調用蠟燭方法,這個方法包含freq?python未定義變量

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 2013-04-06 13:02:25

+0

如果它們確實相同,那麼'self.candle'必須是對'self'本身的引用。這不是一條捷徑。 – chepner 2013-04-06 16:01:12

2

你試圖訪問一個局部變量(不在該範圍中定義)而不是類實例屬性。嘗試self.freq而不是freq。