国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現子類調用父類的方法

2020-02-23 06:10:37
字體:
來源:轉載
供稿:網友

本文實例講述了Python實現子類調用父類的方法。分享給大家供大家參考。具體實現方法如下:

python和其他面向對象語言類似,每個類可以擁有一個或者多個父類,它們從父類那里繼承了屬性和方法。如果一個方法在子類的實例中被調用,或者一個屬性在子類的實例中被訪問,但是該方法或屬性在子類中并不存在,那么就會自動的去其父類中進行查找。

繼承父類后,就能調用父類方法和訪問父類屬性,而要完成整個集成過程,子類是需要調用的構造函數的。

子類不顯式調用父類的構造方法,而父類構造函數初始化了一些屬性,就會出現問題
如果子類和父類都有構造函數,子類其實是重寫了父類的構造函數,如果不顯式調用父類構造函數,父類的構造函數就不會被執行,導致子類實例訪問父類初始化方法中初始的變量就會出現問題。

先來看看如下示例:
代碼如下:class A:
    def __init__(self):
        self.namea="aaa"
    def funca(self):
        print "function a : %s"%self.namea
class B(A):
    def __init__(self):
        self.nameb="bbb"
    def funcb(self):
        print "function b : %s"%self.nameb
b=B()
print b.nameb
b.funcb()
b.funca()
運行結果:
代碼如下:bbb

function b : bbb
Traceback (most recent call last):
  File "D:workbenchpythonMyPythonProjectteststudyoverwrite_method.py", line 19, in <module>
    print b.funca()
  File "D:workbenchpythonMyPythonProjectteststudyoverwrite_method.py", line 6, in funca
    print "function a : %s"%self.namea
AttributeError: B instance has no attribute 'namea'
在子類中,構造函數被重寫,但新的構造方法沒有任何關于初始化父類的namea屬性的代碼,為了達到預期的效果,子類的構造方法必須調用其父類的構造方法來進行基本的初始化。有兩種方法能達到這個目的:調用超類構造方法的未綁定版本,或者使用super函數。

方法一:調用未綁定的超類構造方法

修改代碼,多增一行:
代碼如下:class A:
    def __init__(self):
        self.namea="aaa"
    def funca(self):
        print "function a : %s"%self.namea
class B(A):
    def __init__(self):
        #這一行解決了問題
        A.__init__(self)
        self.nameb="bbb"

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上饶市| 庆阳市| 杂多县| 平利县| 尚义县| 徐闻县| 迁安市| 巨鹿县| 江永县| 同心县| 锦屏县| 庆城县| 合水县| 那坡县| 修文县| 西华县| 溧水县| 宁夏| 土默特右旗| 阿鲁科尔沁旗| 孟津县| 米泉市| 南雄市| 壶关县| 赤峰市| 双流县| 连州市| 日喀则市| 清原| 仁怀市| 清丰县| 宜章县| 邵东县| 大英县| 鄢陵县| 通江县| 抚宁县| 曲沃县| 莒南县| 晋宁县| 马公市|