您的位置:首页 > 技术中心 > 其他 >

Python重写父类的方法有哪些

时间:2023-05-05 00:32

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 = names1 = Singleton('1')s2 = Singleton('2')print(id(s1) == id(s2))

3.注意

1.当一个类存在多继承时,它继承的多个父类有相同的父类A,在重写其父类时需要注意

方法一:父类名.方法名(对象)

  • 父类A会被调用多次(根据继承的个数)

  • 重写父类时根据需要传递所需要的参数

方法二:super(本类名,对象).方法名()

  • 父类A也只会被调用一次

  • 重写父类方法必须传递所有参数

2.当一个类存在继承,且已经在子类中重写相应的变量,改变父类的变量不会对子类有影响

class Parent(object):    x = 1class Child1(Parent):    passclass Child2(Parent):    passprint(Parent.x, Child1.x, Child2.x)Child1.x = 2print(Parent.x, Child1.x, Child2.x)Parent.x = 3print(Parent.x, Child1.x, Child2.x)

输出结果

1 1 1
1 2 1
3 2 3

以上就是Python重写父类的方法有哪些的详细内容,更多请关注Gxl网其它相关文章!

热门排行

今日推荐

热门手游