2013-04-06 141 views
2

有人可以給我解釋下面的代碼 TickGenerator從Observer的對象和方法繼承,爲什麼我們需要兩個observer.init?python基本解釋需要

class TickGenerator(Observer): 
    def __init__(self): 
     Observer.__init__(self) 
     self.price = 1000 
+0

調用父類的構造函數的正規途徑是使用'超()'內置。 – 2013-04-06 13:00:36

回答

1

如果你不叫觀察員。 如下初始化

class TickGenerator(Observer): 
    def __init__(self): 
     self.price = 1000 

這意味着你覆蓋TickGenerator。 init方法和觀察者。 init不會被自動調用。

5

我猜你從哪裏父類的構造函數會被自動調用的語言來。

在Python中,如果覆蓋__init__方法,則除非明確調用它,否則不會調用父類構造函數。

直到Python 3中,它曾經被稱爲:

def __init__(self, *args, **kwargs): 
    super(TickGenerator, self).__init__(*args, **kwargs) 

[super()][1]語法(PEP-3135)就是:

def __init__(self, *args, **kwargs): 
    super().method(*args, **kwargs) 
+0

'Observer .__ init __(self)'是不是調用超類的構造函數? – 0x90 2013-04-06 12:36:50

+1

我想OP的問題是爲什麼他必須根本調用'Observer .__ init __(self)',並且如果他精通父構造函數調用隱式的計算機語言,這是有道理的。 – 2013-04-06 12:38:11