五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
尼木县| 清流县| 怀远县| 大宁县| 夏河县| 班玛县| 双柏县| 云浮市| 凤山市| 米易县| 南投县| 陇川县| 泊头市| 德钦县| 西乌珠穆沁旗| 铜鼓县| 澄江县| 高密市| 沁阳市| 漳浦县| 上饶市| 平阳县| 乐安县| 梓潼县| 锦州市| 柳江县| 石家庄市| 从江县| 阿拉善盟| 内江市| 和林格尔县| 道真| 横峰县| 凤庆县| 扎赉特旗| 常德市| 华宁县| 封开县| 永昌县| 金平| 保康县|