python中類的繼承與方法重寫
阿新 • • 發佈:2019-01-26
在python中繼承中的一些特點:
1:在繼承中基類的構造(init()方法)不會被自動呼叫,它需要在其派生類的構造中親自專門呼叫。
2:在呼叫基類的方法時,需要加上基類的類名字首,且需要帶上self引數變數。區別於在類中呼叫普通函式時並不需要帶上self引數
3:Python總是首先查詢對應型別的方法,如果它不能在派生類(子類即當前類)中找到對應的方法,它才開始到基類(父類)中逐個查詢。(先在本類中查詢呼叫的方法,找不到才去基類中找)。
4:由上面的關係,可以進行方法的重寫,在子類中重寫父類方法。
如果在繼承元組中列了一個以上的類,那麼它就被稱作”多重繼承” 。
語法:
派生類的宣告,與他們的父類類似,繼承的基類列表跟在類名之後,如下所示:
父類以元組的形式存在:
class SubClassName (ParentClass1[, ParentClass2, ...]):
'Optional class documentation string'
class_suite
例項:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Parent:
"父類"
parentAttr = 100
def __init__(self):
print "呼叫父類建構函式"
def parentMethod(self):
print '呼叫父類方法'
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print "父類屬性 :", Parent.parentAttr
class Child(Parent):
"定義子類"
def __init__(self):
print "呼叫子類構造方法"
def childMethod(self):
print '呼叫子類方法 child method'
#在子類中呼叫父類方法
print Parent.getAttr(self)
c = Child() # 例項化子類
c.childMethod() # 呼叫子類的方法
c.parentMethod() # 呼叫父類方法
c.setAttr(200) # 再次呼叫父類的方法
c.getAttr() # 再次呼叫父類的方法
檢測類之間的父子關係:
issubclass() - 布林函式(zi,fu)判斷一個類是另一個類的子類或者子孫類,語法:issubclass(sub,sup)
isinstance(obj, Class) 布林函式如果obj是Class類的例項物件或者是一個Class子類的例項物件則返回true。