2012-07-26 31 views

回答

8

__init__(self)是在所謂的「類」中使用的特殊功能。 Classes允許您定義自己的數據類型/對象,並且在創建您定義的數據類型/對象的新實例時調用此函數。這就像說:「嘿,每次你做這些事情之一,確保你也運行這些代碼」。在面向對象編程中,我們稱這種函數爲「構造函數」。這是一個用來「構建」一個新對象的函數。 self是對實際創建的對象的引用。換句話說,這個對象在技術上已經創建了,當你到達你的功能時。 __init__只是讓你有機會初始化你的對象的各個方面(因此名稱__init__)。

Python是功能,過程和麪向對象範例的混合體。這個業務與物體有關。有關面向對象編程的更多信息,您可以檢出wikipedia article

+0

很好的解釋,新的人來OOP – AdjunctProfessorFalcon 2015-07-02 03:13:07

4

__init__是Python中類的constructor。在類中由__括起來的方法具有特殊的含義(構造,操作符實現等)。

+2

技術上真正有用的,它不是一個構造函數。 – geoffspear 2012-07-26 16:47:49

+1

實際上,技術差異通常並不重要,除非您正在處理高級Python技術,例如元類,大多數程序員都不會碰。 – atomicinf 2012-07-26 16:49:48

+0

Initialiser也許......'__new__'是構造函數。 – 2012-07-26 16:49:56

3

可能重複:Python __init__ and self what do they do?

def print_word(word)是函數(或方法/過程)。 __init__(self)中使用的函數。

這個關於類的Python教程的section描述了__init__函數。我強烈建議閱讀整個頁面,順便說一句。

self是一個單詞的任意選擇來引用類本身;如果你想,你可以使用watermelon。請參閱:What is the purpose of self?

用雙下劃線包裹的Python類函數具有特殊含義。另一個例子是__str__。 PEP8(一個重要的Python風格文檔)的section解釋了Python中下劃線的含義。


超類:

0

自我是指對象本身和__init__的繼承section初始化領域的構造那個「自我」。 例如,您正在創建一個名爲「name」和「age」字段的Person類。在__init__,您可以通過設置默認名稱爲「鮑勃」和年齡36:

def __init__(self): 
    self._name = "Bob" 
    self._age = 36 

這樣,每次你創建一個新的Person對象,默認的名字和年齡將被設置爲「鮑勃「和36.

1

要理解__init__(self, ...)的作用,您必須首先理解類。

一個類基本上定義了一個對象的類型。例如,如果我想定義如何Fish的行爲,我可能會開始了與形式

class Fish: 
    def swim(self): 
     print "I'm swimming!" 
    def breathe(self): 
     print "I'm breathing!" 

不過的東西,這不是一個非常有用的,因爲當我們定義什麼是Fish可以,我們不知道如何存儲關於Fish的其他基本素質,例如它有多重。

原則上,如果我有一個Fish命名爲f,我只是做

f.weight = 3 

但是,如果我忘了做,對於一些Fish,說Fish命名爲g,然後嘗試使用g.weight在一個表達式,Python不會很高興 - 它會拋出一個AttributeError抱怨Fish instance has no attribute 'weight'。爲了避免這種情況,我們可以爲我們的類定義一個構造函數,每次創建新的Fish時,都會設置屬性,如其權重和顏色以及您定義爲合理默認值的任何其他屬性。在Python中,這個構造函數被稱爲__init__。只要你在類中定義它,每當創建該類的新實例時就會調用它。

class Fish: 
    def __init__(self): 
     self.weight = 3 
    def swim(self): 
     print "I'm swimming!" 
    def breathe(self): 
     print "I'm breathing!" 

你定義一個類的每個函數有一個隱含的說法,即我們通常標註爲self。這第一個參數始終設置爲您要調用該函數的實例。舉例來說,如果我調用

f = Fish() 
f.swim() 

Python中創建一個Fish,把它放在f,然後調用Fish.__init__(f)Fish.swim(f)就可以了。在這種情況下,f中的Fish將其權重設置爲3,並將導致「我正在游泳!」被打印。

您可以創建不需要採取self參數類的功能,號稱靜態函數,但這些都是有用的,只有你可能不會一會遇到的具體情況。 Python中的類函數通常是實例函數,這將隱含地採用self參數。

需要注意的是,在上面的例子中,每Fish創建將有它的缺省權重設置爲3。如果我們想在創建時指定一個Fish的體重?好了,我們可以定義__init__()採取一些額外的參數:

class SuperFish: 
    def __init__(self, weight = 3): 
     self.weight = weight 

注意,weight說法有定義爲3。因此默認值,其實它是可選爲我們指定的權重。如果我們剛剛說過def __init__(self, weight):,那麼就需要指定重量。

我們現在可以執行以下調用中的任何一個:

a = SuperFish() # creates a SuperFish with a weight of 3 
b = SuperFish(42) # creates a SuperFish with a weight of 42 
c = SuperFish(weight = 9001) # creates a SuperFish with a weight of 9001 

。希望清除的東西了你:)

相關問題