Python中的面向?qū)ο缶幊淘斀?下)
繼承
繼承描述了基類的屬性如何“遺傳”給派生類。一個(gè)子類可以繼承它的基類的任何屬性,不管是數(shù)據(jù)屬性還是方法。
創(chuàng)建子類的語(yǔ)法看起來(lái)與普通(新式)類沒(méi)有區(qū)別,一個(gè)類名,后跟一個(gè)或多個(gè)需要從其中派生的父類:
class SubClassName (ParentClass1[, ParentClass2, ...]):
'optional class documentation string'
class_suite
實(shí)例
class Parent(object): # define parent class 定義父類
def parentMethod(self):
print 'calling parent method'
class Child(Parent): # define child class 定義子類
def childMethod(self):
print 'calling child method'
繼承與覆蓋
繼承
不同于Java,python的子類繼承父類后,會(huì)把父類的所有的方法,包括構(gòu)造器init()也繼承下來(lái).
class Parent():
def __init__(self):
print "init Parent class instance"
def func(self):
print "call parent func"
class Child(Parent):
def __init__(self):
print "init Child class instance"
child = Child()
child.func()
輸出
init Child class instance
call parent func
super關(guān)鍵字
super 是用來(lái)解決多重繼承問(wèn)題的,直接用類名調(diào)用父類方法在使用單繼承的時(shí)候沒(méi)問(wèn)題,但是如果使用多繼承,會(huì)涉及到查找順序(MRO)、重復(fù)調(diào)用(鉆石繼承)等種種問(wèn)題。語(yǔ)法如下
super(type[, obj])
示例
class C(B):
def method(self, arg):
super(C, self).method(arg)
注意
super繼承只能用于新式類,用于經(jīng)典類時(shí)就會(huì)報(bào)錯(cuò)。
新式類:必須有繼承的類,如果沒(méi)什么想繼承的,那就繼承object
經(jīng)典類:沒(méi)有父類,如果此時(shí)調(diào)用super就會(huì)出現(xiàn)錯(cuò)誤:『super() argument 1 must be type, not classobj』
實(shí)例
class Parent(object):
def __init__(self):
self.phone = '123456'
self.address = 'abcd'
class Child(Parent):
def __init__(self):
super(Child, self).__init__()
self.data = 100
def main():
child = Child()
print "phone is: ", child.phone
print "address is: ", child.address
print "data is: ", child.data
if __name__ == '__main__':
main()
輸出
phone is: 123456
address is: abcd
data is: 100
重寫
子類只要重新定義一個(gè)與父類的方法同名的方法,就可以重寫覆蓋父類的方法. 子類只要把上例父類的func(self)重寫就行了.
class Parent():
def __init__(self):
print "init Parent class instance"
def func(self):
print "call parent func"
class Child(Parent):
def __init__(self):
print "init Child class instance"
child = Child()
child.func()
輸出
init Child class instance
call Child func
多重繼承
同 C++一樣,Python 允許子類繼承多個(gè)基類。但一般不推薦用多重繼承.語(yǔ)法如下:
class Father():
def __init__(self):
print "init Father instance"
class Mother():
def __init__(self):
print "init Mother instance"
class Child(Father, Mother):
pass
類、實(shí)例和其他對(duì)象的內(nèi)建函數(shù)
issubclass()
布爾函數(shù)判斷一個(gè)類是另一個(gè)類的子類或子孫類。它有如下語(yǔ)法:
issubclass(sub, sup)
isinstance()
布爾函數(shù)在判定一個(gè)對(duì)象是否是另一個(gè)給定類的實(shí)例時(shí),非常有用。它有如下語(yǔ)法:
isinstance(obj1, obj2)
attr()系列函數(shù)
●hasattr()
它的目的就是為了決定一個(gè)對(duì)象是否有一個(gè)特定的屬性,一般用于訪問(wèn)某屬性前先作一下檢查。
●getattr()和setattr()
●getattr()和 setattr()函數(shù)相應(yīng)地取得和賦值給對(duì)象的屬性,
●delattr()
刪除特定的屬性
實(shí)例
class Child(Parent):
def __init__(self):
self.data = 100
child = Child()
print "has data attr?", hasattr(child, 'data')
print "delete attr"
delattr(child, 'data')
print "has data attr?", hasattr(child, 'data')
print "set data attr to 200"
setattr(child, 'data', 200)
print "data attr is: ", getattr(child, 'data')
輸出
has data attr? True
delete attr
has data attr? False
set data attr to 200
data attr is: 200
私有化
Python沒(méi)有像Java那樣實(shí)現(xiàn)真正的封裝,只是用雙劃線和單劃線實(shí)現(xiàn)私有化.
●雙劃線
防止外部訪問(wèn).如在func前加雙劃線,可以防止包括子類的實(shí)例的訪問(wèn).
def __func(self):
print "call"
●單劃線
防止模塊的屬性用“from mymodule import *”來(lái)加載。
相關(guān)文章
PyQt5 designer 頁(yè)面點(diǎn)擊按鈕跳轉(zhuǎn)頁(yè)面實(shí)現(xiàn)
本文主要介紹了PyQt5 designer 頁(yè)面點(diǎn)擊按鈕跳轉(zhuǎn)頁(yè)面實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01在Mac下使用python實(shí)現(xiàn)簡(jiǎn)單的目錄樹展示方法
今天小編就為大家分享一篇在Mac下使用python實(shí)現(xiàn)簡(jiǎn)單的目錄樹展示方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11python飛機(jī)大戰(zhàn)pygame游戲之?dāng)硻C(jī)出場(chǎng)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了python飛機(jī)大戰(zhàn)pygame游戲之?dāng)硻C(jī)出場(chǎng)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Python使用pygame模塊實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲中敵機(jī)出場(chǎng)相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-12-12Python裝飾器簡(jiǎn)單用法實(shí)例小結(jié)
這篇文章主要介紹了Python裝飾器簡(jiǎn)單用法,結(jié)合實(shí)例形式總結(jié)分析了Python裝飾器的基本功能、簡(jiǎn)單用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-12-12python 文件的基本操作 菜中菜功能的實(shí)例代碼
這篇文章主要介紹了python 文件的基本操作 菜中菜功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07分析機(jī)器學(xué)習(xí)之決策樹Python實(shí)現(xiàn)
決策樹是一種非參數(shù)的有監(jiān)督學(xué)習(xí)方法,它能夠從一系列有特征和標(biāo)簽的數(shù)據(jù)中總結(jié)出決策規(guī)則,并用樹狀圖的結(jié)構(gòu)來(lái)呈現(xiàn)這些規(guī)則,以解決分類和回歸問(wèn)題。決策樹算法容易理解,適用各種數(shù)據(jù),在解決各種問(wèn)題時(shí)都有良好表現(xiàn)2021-06-06