最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Python中的方法重寫與名稱修飾

2023-07-18 17:16 作者:我不是k_  | 我要投稿

今天寫python系統(tǒng)的時(shí)候,發(fā)現(xiàn)父類怎么老是調(diào)用不了子類重寫的方法,整了好久才發(fā)現(xiàn),python的名稱修飾機(jī)制,好久沒(méi)寫代碼了,這一塊知識(shí)點(diǎn)忘干凈了,下面進(jìn)行總結(jié)。


在Python中,方法重寫是面向?qū)ο缶幊讨械闹匾拍?,它允許子類對(duì)父類的方法進(jìn)行重新定義以滿足子類特有的需求。然而,在方法重寫過(guò)程中,有一個(gè)有趣的機(jī)制稱為名稱修飾(name mangling),它影響了以雙下劃線開頭的方法名。在本篇博客中,我們將探討Python中的方法重寫和名稱修飾的工作原理和使用方法。

1. 方法重寫(Method Overriding)
方法重寫是指在子類中重新定義一個(gè)與父類方法名稱相同的方法。這樣,當(dāng)通過(guò)子類對(duì)象調(diào)用該方法時(shí),將執(zhí)行子類中的方法而不是父類中的方法。方法重寫使得子類可以自定義和修改父類方法的行為,實(shí)現(xiàn)更靈活和具有特定功能的子類。

示例:

class Parent: ? ?

????def some_method(self): ? ? ? ?

????????print("Parent's method")

class Child(Parent): ? ?

????def some_method(self): ?# 方法重寫 ? ? ? ?

????????print("Child's method")?


child_obj = Child()?

child_obj.some_method()??

# 輸出:"Child's method"

2. 名稱修飾(Name Mangling)
名稱修飾是Python中用于避免子類意外地覆蓋父類方法或?qū)傩缘臋C(jī)制。當(dāng)方法或?qū)傩缘拿Q以雙下劃線__開頭時(shí),Python會(huì)在名稱前面添加一個(gè)下劃線和類名,形成_類名__方法名的形式。這樣,即使子類定義了與父類同名的方法,實(shí)際上它們的名稱并不相同,從而避免了沖突。

示例:

class Parent: ? ?

????def __some_method(self): ?# 名稱修飾 ? ? ? ?

????????print("Parent's method")

class Child(Parent): ? ?

????def __some_method(self): ?# 名稱修飾后,實(shí)際上成為 _Child__some_method ? ? ? ?????print("Child's method")?

child_obj = Child()?

child_obj._Child__some_method() ?

# 輸出:"Child's method"

示例2:

class Parent:? ??

????def B(self): ? ? ? ?

????????self.__A() ?# 在父類的B方法中調(diào)用A方法 ? ?

????def?__A(self): ? ? ? ?

????????print("Parent's A method")

class Child(Parent): ? ?

def B(self): ? ? ? ?

????return super(Child, self).B() ?# 使用super()調(diào)用父類的B方法 ? ?

def?__A(self): ?# 子類沒(méi)有成功重寫? ? ? ??

????print("Child's A method")# 創(chuàng)建子類對(duì)象

child_obj = Child()# 實(shí)際上調(diào)用父類的__A方法

# 輸出:"Parent's A method"

3. 以單下劃線_開頭的方法名
在Python中,以單下劃線_開頭的方法名并不會(huì)觸發(fā)名稱修飾機(jī)制。這樣的方法被視為內(nèi)部實(shí)現(xiàn)細(xì)節(jié),建議在外部使用時(shí)要謹(jǐn)慎。子類可以定義以單下劃線開頭的方法,并且與父類的同名方法不會(huì)發(fā)生沖突。

示例:

class?Parent:? ??

????def?B(self): ? ??? ?

????????self._A() ?# 在父類的B方法中調(diào)用A方法?? ?

????def?_A(self): ? ? ? ?

????????print("Parent's A method")

class?Child(Parent): ? ?

def?B(self): ? ? ? ?

????return?super(Child, self).B() ?# 使用super()調(diào)用父類的B方法?? ?

def?_A(self): ?# 子類成功重寫? ? ? ??

????print("Child's A method")# 創(chuàng)建子類對(duì)象

child_obj = Child()# 實(shí)際上調(diào)用子類的_A方法

# 輸出:"Child's A method"


總結(jié)
方法重寫是Python中面向?qū)ο缶幊痰闹匾匦裕试S子類重新定義父類的方法以實(shí)現(xiàn)個(gè)性化的功能。名稱修飾是一種機(jī)制,用于避免子類意外地覆蓋父類方法或?qū)傩?,通過(guò)在名稱前添加_類名來(lái)解決命名沖突問(wèn)題。此外,以單下劃線開頭的方法名不會(huì)觸發(fā)名稱修飾,但應(yīng)謹(jǐn)慎使用,避免對(duì)外部代碼造成意外影響。了解方法重寫和名稱修飾的原理,將有助于編寫更具靈活性和清晰性的Python類和繼承關(guān)系。


Python中的方法重寫與名稱修飾的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
琼结县| 荆州市| 内黄县| 巨鹿县| 大化| 乌兰浩特市| 光泽县| 海兴县| 阳江市| 开鲁县| 贵港市| 新化县| 马边| 南华县| 昌图县| 措美县| 射阳县| 昭通市| 富锦市| 封丘县| 滁州市| 峨眉山市| 额尔古纳市| 防城港市| 凤山市| 静安区| 固镇县| 蚌埠市| 繁昌县| 宝山区| 连云港市| 安国市| 儋州市| 寿宁县| 当阳市| 咸宁市| 洪湖市| 阿克苏市| 翼城县| 易门县| 来宾市|