Python類多重繼承方式
Python類多重繼承
在 Python中有6種標(biāo)準(zhǔn)數(shù)據(jù)類型,分別為:
Number(數(shù)字)String(字符串)List(列表)Tuple(元組)Sets(集合)Dict(字典)
而根據(jù)內(nèi)存中的內(nèi)容是否可變,分為可變類型與不可變類型。
其中,數(shù)字、字符串、元組和集合被稱為不可變類型,列表和字典稱為可變類型。
1. 不可變類型子類化
假定我們需要處理大量的浮點(diǎn)數(shù),將浮點(diǎn)數(shù)四舍五入后得到最后的結(jié)果。
這時(shí)我們可以定義這樣一個(gè)類,用來(lái)進(jìn)行這個(gè)操作。
例如:
class RoundFloat(float):
def __new__(cls, val):
return float.__new__(cls,round(val,1))
print(RoundFloat(2.6557))
結(jié)果為:
2.7
在這個(gè)類里面,通過(guò)調(diào)用父類的構(gòu)造器來(lái)創(chuàng)建對(duì)象,然后實(shí)例化float、RoundFloat。
這里我們僅僅是從一種類型中派生而來(lái),我們可以使用super()內(nèi)建函數(shù)去捕獲對(duì)應(yīng)的父類,然后調(diào)用父類的__new__()方法進(jìn)行實(shí)例化。
例如:
class RoundFloat(float):
def __new__(cls, val):
return super(RoundFloat,cls).__new__(cls,round(val,1))
print(RoundFloat(2.6557))
結(jié)果為:
2.7
2. 可變類型子類化
子類化一個(gè)可變類型與子類化不可變類型很類似,但是我們可能不需要使用__new__()或者是__init__(),因?yàn)橐话闱闆r下我們定義的類所繼承到的類型的默認(rèn)行為就足夠我們用了。
例如:
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 中,多重繼承就是允許子類繼承多個(gè)父類,子類可以調(diào)用多個(gè)父類的方法和屬性。
但是,當(dāng)多個(gè)父類擁有相同方法名的方法時(shí),我們通過(guò)方法名調(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
在這個(gè)例子中,類C繼承自類A和類B,類D繼承自類A和類B,類E繼承自類C和類D。
在我們調(diào)用E.test()時(shí),在類A和類B中都存在這個(gè)方法。
但是由于在多重繼承中遵循廣度優(yōu)先的方式,所以程序最先搜索類E,然后再搜索類C和類D。
如果還沒(méi)找到,再到類A中查找。若類A中存在這個(gè)方法,則調(diào)用這個(gè)方法,若在類A中也沒(méi)有找到,則再到類B中查找。
調(diào)用E.test()結(jié)果為:
this is A.test()
如果調(diào)用E.check()方法,那么先到類E中查找,然后在類C中查找,再到類D中查找。
在類D中找到這個(gè)方法,調(diào)用這個(gè)方法。
調(diào)用E.check()的結(jié)果為:
this is D.check()
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python腳本在Appium庫(kù)上對(duì)移動(dòng)應(yīng)用實(shí)現(xiàn)自動(dòng)化測(cè)試
這篇文章主要介紹了使用Python的Appium庫(kù)對(duì)移動(dòng)應(yīng)用實(shí)現(xiàn)自動(dòng)化測(cè)試的教程,屬于Python腳本的一個(gè)自動(dòng)化應(yīng)用,需要的朋友可以參考下2015-04-04
python-itchat 獲取微信群用戶信息的實(shí)例
今天小編就為大家分享一篇python-itchat 獲取微信群用戶信息的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
python人工智能算法之差分進(jìn)化算法的實(shí)現(xiàn)
DE基于GA,正如進(jìn)化基于遺傳,和遺傳算法相比,差分進(jìn)化引入了差分變異模式,相當(dāng)于開(kāi)辟了一條嶄新的進(jìn)化路徑,下面就來(lái)看看差分優(yōu)化算法是如何實(shí)現(xiàn)的吧2023-08-08
Python 調(diào)用 C++ 傳遞numpy 數(shù)據(jù)詳情
這篇文章主要介紹了Python 調(diào)用 C++ 傳遞numpy 數(shù)據(jù)詳情,文章主要分為兩部分,c++代碼和python代碼,代碼分享詳細(xì),需要的小伙伴可以參考一下,希望對(duì)你有所幫助2022-03-03
Python基于Gensim實(shí)現(xiàn)文本相似度/匹配/查重
Gensim是基于Python語(yǔ)言的自然語(yǔ)言處理庫(kù),用來(lái)主題建模、文本相似度等文本處理任務(wù),下面我們就來(lái)看看如何使用Gensim實(shí)現(xiàn)文本相似度/匹配/查重等操作吧2024-03-03

