Python類多重繼承方式
Python類多重繼承
在 Python中有6種標(biāo)準(zhǔn)數(shù)據(jù)類型,分別為:
Number
(數(shù)字)String
(字符串)List
(列表)Tuple
(元組)Sets
(集合)Dict
(字典)
而根據(jù)內(nèi)存中的內(nèi)容是否可變,分為可變類型與不可變類型。
其中,數(shù)字、字符串、元組和集合被稱為不可變類型,列表和字典稱為可變類型。
1. 不可變類型子類化
假定我們需要處理大量的浮點數(shù),將浮點數(shù)四舍五入后得到最后的結(jié)果。
這時我們可以定義這樣一個類,用來進行這個操作。
例如:
class RoundFloat(float): def __new__(cls, val): return float.__new__(cls,round(val,1)) print(RoundFloat(2.6557))
結(jié)果為:
2.7
在這個類里面,通過調(diào)用父類的構(gòu)造器來創(chuàng)建對象,然后實例化float、RoundFloat。
這里我們僅僅是從一種類型中派生而來,我們可以使用super()內(nèi)建函數(shù)去捕獲對應(yīng)的父類,然后調(diào)用父類的__new__()方法進行實例化。
例如:
class RoundFloat(float): def __new__(cls, val): return super(RoundFloat,cls).__new__(cls,round(val,1)) print(RoundFloat(2.6557))
結(jié)果為:
2.7
2. 可變類型子類化
子類化一個可變類型與子類化不可變類型很類似,但是我們可能不需要使用__new__()或者是__init__(),因為一般情況下我們定義的類所繼承到的類型的默認行為就足夠我們用了。
例如:
class SortedKeyDict(dict): def keys(self): return sorted(super( SortedKeyDict, self).keys()) d = SortedKeyDict((('zhangsan', 1), ('lisi', 2),('wangwu', 3))) print("By iterator:".ljust(12), [key for key in d]) print("By keys():".ljust(12), d.keys())
結(jié)果為:
By iterator: ['zhangsan', 'lisi', 'wangwu']
By keys(): ['lisi', 'wangwu', 'zhangsan']
3. 多重繼承
在 Python 中,多重繼承就是允許子類繼承多個父類,子類可以調(diào)用多個父類的方法和屬性。
但是,當(dāng)多個父類擁有相同方法名的方法時,我們通過方法名調(diào)用父類方法就有一定的順序。
例如:
class A(object): def test(self): print("this is A.test()") class B(object): def test(self): print("this is B.test()") def check(self): print("this is B.check()") class C(A,B): pass class D(A,B): def check(self): print("this is D.check()") class E(C,D): pass
在這個例子中,類C繼承自類A和類B,類D繼承自類A和類B,類E繼承自類C和類D。
在我們調(diào)用E.test()時,在類A和類B中都存在這個方法。
但是由于在多重繼承中遵循廣度優(yōu)先的方式,所以程序最先搜索類E,然后再搜索類C和類D。
如果還沒找到,再到類A中查找。若類A中存在這個方法,則調(diào)用這個方法,若在類A中也沒有找到,則再到類B中查找。
調(diào)用E.test()結(jié)果為:
this is A.test()
如果調(diào)用E.check()方法,那么先到類E中查找,然后在類C中查找,再到類D中查找。
在類D中找到這個方法,調(diào)用這個方法。
調(diào)用E.check()的結(jié)果為:
this is D.check()
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用logging模塊實現(xiàn)打印log到指定文件的方法
這篇文章主要介紹了Python使用logging模塊實現(xiàn)打印log到指定文件的方法,結(jié)合實例形式分析了Python logging模塊的原理及相關(guān)日志輸出操作技巧,需要的朋友可以參考下2018-09-09Django1.11配合uni-app發(fā)起微信支付的實現(xiàn)
這篇文章主要介紹了Django1.11配合uni-app發(fā)起微信支付的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10