首頁 >後端開發 >Python教學 >Python重寫父類別的方法有哪些

Python重寫父類別的方法有哪些

PHPz
PHPz轉載
2023-05-04 23:52:132104瀏覽

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.實際應用

#用元类实现单例模式
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會被呼叫多次(根據繼承的個數)

  • 重寫父類別時根據需要傳遞所需的參數

方法二:super(本類別名稱,物件).方法名稱()

  • 父類別A也只會被呼叫一次

  • 重寫父類別方法必須傳遞所有參數

2.當一個類別存在繼承,且已經在子類別中重寫對應的變數,改變父類別的變數不會對子類別有影響

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重寫父類別的方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除