Python之構造方法
阿新 • • 發佈:2018-12-07
1、先看下語法,可以看到構造方法是固定的__init__命名的,self代表當前物件
def __init__(self):
pass
2、在python中以 __函式名__,就是這樣的雙下劃線,在函式前、在函式後都有的,是python中的特殊方法的識別符號
3、python中的構造方法可不是自動呼叫的,比如子類Son、父類Father,如果子類Son沒有顯式的呼叫Father的構造方法,那就不會呼叫的
class Father(object): def __init__(self): self.name = "wang da ye" class Son(Father): def __init__(self): self.age = 25 def print_my_father_name(self): print self.name son = Son() son.print_my_father_name()
輸出結果(報錯,因為沒有顯式的呼叫父類的構造構造方法:
AttributeError: 'Son' object has no attribute 'name'
4、如果解決上面的問題,涉及到子類如何呼叫父類的構造方法
解決辦法1: 使用 父類.__init__(self),即可
def __init__(self):
Father.__init__(self)
self.age = 25
解決辦法2:使用super函式(),並向其傳入子類、及當前例項物件,然後直接呼叫__init__()方法
def __init__(self):
super(Son, self).__init__()
self.age = 25
5、當然,如果是一個class中的構造方法,當然是在建立物件的時候,自動呼叫的
class Father(object):
def __init__(self):
self.name = "wang da ye"
print self.name
father = Father()
PS:當father = Father()執行的時候,除了def、class開頭的,其他在模組中沒有縮排的語句,會被自動執行
6、在python世界中,你還可以顯式的呼叫__inint__(self),這點別家還真沒有
如下
class Father(object):
def __init__(self):
self.name = "wang da ye"
print self.name
def print_double_name(self):
self.__init__()
father = Father()
father.print_double_name()
輸出結果:
wang da ye
wang da ye