構造方法與其他普通方法不同的地方在於,當一個對象被創建后,會立即調用構造方法。
在python中創建一個構造方法很簡單,只需要把init方法的名字從簡單的init修改為魔法版本__init__即可。
class foobar:
def __init__(self):
self.somevar = 42
>>> f = foobar()
>>> f.somevar
42
如果給構造方法傳遞幾個參數的話,會怎么樣呢?
>>> class foobar:
... def __init__(self, value = 42):
... self.somevar = value
...
>>> f = foobar('this is a test')
>>> f.somevar
'this is a test'
**************************************************************************
重寫一般方法和特殊的構造方法
每個類都可能有一個或者多個超類,它們從超類那里繼承行為方式,如果一個方法在b類的一個實例中被調用,但在b類中沒有找到該方法,那么就去它的超類a里面找
class a:
def hello(self):
print "hello,i'am a."
class b(a)
a類定義了一個叫做hello的方法,被b類繼承,下面是一個說明類是如何工作的列子
>>>A = a()
>>>B = b()
>>>A.hello()hello,i'am a
>>>B.hello()
hello,i'am a
因為b類沒有定義自己的hello方法,所以當hello被調用的時候,原始的信息就被打印出來。
在子類中增加功能的最基本的方法就是增加方法,但是也可以重寫一些超類的方法來自定義繼承的行為。b類也能重寫這個方法,比如下面的列子中b類的定義被修改了。
class b(a):
def hello(self):
print "hello,i'am b."
重寫是繼承機制中的一個重要內容,對於構造方法尤其重要,構造方法用來初始化新創建的對象的狀態,大多數子類不僅要擁有自己的初始化代碼,還要擁有超類的初始化代碼,雖然重寫的機制對於所有方法來說都是一樣的,但是當重寫構造方法和普通重寫方法更容易遇到特別的問題,比如,如果一個類的構造方法被重寫,那么就需要調用超類的構造方法,否則,對象可能不會被正確的初始化。