1. 程式人生 > >Python之構造方法

Python之構造方法

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