开发者

Python重写父类的三种方法小结

开发者 https://www.devze.com 2023-03-29 09:26 出处:网络 作者: 小Pawn爷
目录1.基础应用2.实际应用3.注意1.基础应用 class Animal(object): def eat(self): print(\"动物js吃东西\")
目录
  • 1.基础应用
  • 2.实际应用
  • 3.注意

1.基础应用

class Animal(object):
  def eat(self):
    print("动物js吃东西")


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.instancepython[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,在重写其父类时需要android注意

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

  • 父类A会被调用多次(根据继承的个数)
  • 重写父类时根据需要传递所需要的参数

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

  • 父类A也只会被调用一次
  • 重写父类方法必须传递所有参数

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

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.xCeHWj, Child1.x, Child2.x)

输出结果

1 1 1

1 2 1

3 2 3

到此这篇关于python重写父类的三种方法小结的文章就介绍到这了,更多相关Python重写父类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消