Python重寫父類的三種方法小結
更新時間:2023年03月28日 11:05:43 作者:小Pawn爺
本文主要介紹了Python重寫父類的三種方法小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
1.基礎應用
class Animal(object):
? ? def eat(self):
? ? ? ? print("動物吃東西")
class Cat(Animal):
? ? def eat(self):
? ? ? ? print("貓吃魚")
? ? ? ? # 格式一:父類名.方法名(對象)
? ? ? ? Animal.eat(self)
? ? ? ? # 格式二:super(本類名,對象).方法名()
? ? ? ? super(Cat, self).eat()
? ? ? ? # 格式三:super()方法名()
? ? ? ? super().eat()
cat1 = Cat()
cat1.eat()
print(cat1)2.實際應用
#用元類實現(xiàn)單例模式
class SingletonType(type):
? ? instance = {}
? ? def __call__(cls, *args, **kwargs):
? ? ? ? if cls not in cls.instance:
? ? ? ? ? ? # 方式一:
? ? ? ? ? ? # cls.instance[cls] = type.__call__(cls, *args, **kwargs)
? ? ? ? ? ? # 方式二
? ? ? ? ? ? # cls.instance[cls] = super(SingletonType, cls).__call__(*args, **kwargs)
? ? ? ? ? ? # 方式三
? ? ? ? ? ? cls.instance[cls] = super().__call__(*args, **kwargs)
? ? ? ? return cls.instance[cls]
class Singleton(metaclass=SingletonType):
? ? def __init__(self, name):
? ? ? ? self.name = name
s1 = Singleton('1')
s2 = Singleton('2')
print(id(s1) == id(s2))3.注意
1.當一個類存在多繼承時,它繼承的多個父類有相同的父類A,在重寫其父類時需要注意
方法一:父類名.方法名(對象)
- 父類A會被調(diào)用多次(根據(jù)繼承的個數(shù))
- 重寫父類時根據(jù)需要傳遞所需要的參數(shù)
方法二:super(本類名,對象).方法名()
- 父類A也只會被調(diào)用一次
- 重寫父類方法必須傳遞所有參數(shù)
2.當一個類存在繼承,且已經(jīng)在子類中重寫相應的變量,改變父類的變量不會對子類有影響
class Parent(object): ? ? x = 1 class Child1(Parent): ? ? pass class Child2(Parent): ? ? pass print(Parent.x, Child1.x, Child2.x) Child1.x = 2 print(Parent.x, Child1.x, Child2.x) Parent.x = 3 print(Parent.x, Child1.x, Child2.x)
輸出結果
1 1 1
1 2 1
3 2 3
到此這篇關于Python重寫父類的三種方法小結的文章就介紹到這了,更多相關Python重寫父類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VSCode配置python環(huán)境及中文問題解決方法
這篇文章主要介紹了VSCode配置python環(huán)境及中文問題,print打印中文亂碼如何解決這個問題呢,本文給大家?guī)韮煞N方法幫助大家解決這個問題,需要的朋友可以參考下2022-02-02
django實現(xiàn)web接口 python3模擬Post請求方式
今天小編就為大家分享一篇django實現(xiàn)web接口 python3模擬Post請求方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
windows環(huán)境下tensorflow安裝過程詳解
這篇文章主要為大家詳細介紹了windows環(huán)境下tensorflow安裝過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03

