2015-11-25 50 views
0

在Python中,我對類的遺產有一個討厭的問題。 的代碼如下:在Python中對類和線程的多重繼承

import time 
from threading import Thread 

class Main: 

def __init__(self): 
     self.var = 0 
     self.fils_on() 

    def fils_on(self): 
     self.temp = Fils() 
     self.temp.start() 

    def fils_off(self): 
     self.temp.stop() 
     del self.temp 

class Fils(Thread, Main): 

    def __init__(self): 
     Main.__init__(self) 
     Thread.__init__(self) 
     self.encore = True 

    def run(self): 
     i = 0 
     while self.encore: 
      chaine = str(i) 
      print chaine 
      print "var: ", self.var 
      i += 1 
      time.sleep(1) 

    def stop(self): 
     self.encore = False 

if __name__ == "__main__": 
    main = Main() 

我的問題是,當我稱之爲「主」,我不設法從打印酒坊類self.var變量。

有人知道爲什麼嗎? 我該如何解決它?

+0

你的類'Main'創建一個'Fils',它自己調用'Main'的init函數。這將導致無限循環! –

回答

1

我不明白你想什麼來實現,但它似乎您試圖與線程的實驗中,上述實施超過遞歸深度,因爲你有一個循環依賴,__init__從主類依賴於self.fils_on(),它構建Fils()這觸發Fils.__init__(),其又調用Main.__init__(self)並且整個過程繼續。 在這裏我試圖修改你的代碼,其中我刪除了Fils和Mains之間的繼承,並在Fils中移動了var。

import time 
from threading import Thread 

class Main: 

    def __init__(self): 
      self.fils_on() 

    def fils_on(self): 
     self.temp = Fils() 
     self.temp.start() 

    def fils_off(self): 
     self.temp.stop() 
     del self.temp 

class Fils(Thread): 

    def __init__(self): 
     Thread.__init__(self) 
     self.encore = True 
     self.var = 0 


    def run(self): 
     i = 0 
     while self.encore: 
      chaine = str(i) 
      print chaine 
      print "var: ", self.var 
      i += 1 
      time.sleep(1) 

    def stop(self): 
     self.encore = False 

if __name__ == "__main__": 
    main = Main()