要理解__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
。希望清除的東西了你:)
很好的解釋,新的人來OOP – AdjunctProfessorFalcon 2015-07-02 03:13:07