面向对象--类的继承与重用父类属性或方法

tech2026-02-17  3

类的继承 一、类分经典类和新式类 1、在python2中,不带(object)的是经典类,带(object)的是新式类 2、在python3中,带和不带(object)都是新式类 3、经典类 的继承查找顺序是 深度优先 4、新式类 的继承查找顺序是 广度优先

# python3.8.3 class A(object): def test(self): print('from A') class B(A): def test(self): print('from B') class C(A): def test(self): print('from C') class D(B): def test(self): print('from D') class E(C): def test(self): print('from E') class F(D,E): # def test(self): # print('from F') pass f=F() f.test() 如果F里面没有test()功能的时候,会先从父类D里面查找,D里面没有就去E里面查找 F.mro() #查看顺序继承 [<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

重用父类属性或方法

在子类派生出新的方法中重用父类方法,有两种实现方式 1、指名道姓(不依赖继承)

# 指名道姓的方式调用父类功能 class role: def __init__(self, name, hurt, life_value): self.name = name self.hurt = hurt self.life_value = life_value def attack(self, name): name.life_value -= self.hurt class galen(role): camp = 'DE Marcia' def __init__(self, name, hurt, life_value, weapon): # self.name=name # self.hurt=hurt # self.life_value=life_value role.__init__(self, name, hurt, life_value) #知名道姓,继承父类功能 self.weapon = weapon def attack(self, name): role.attack(self, name) # 子类功能中调用父类功能 print('from galen class') 子类功能中调用父类的功能 class role: def __init__(self, name, hurt, life_value): self.name = name self.hurt = hurt self.life_value = life_value def attack(self, name): name.life_value -= self.hurt class galen(role): camp = 'DE Marcia' def attack(self, name): role.attack(self, name) # 这个就是在子类得功能中调用父类功能 print('from galen class')

2、super() (依赖继承)

class role: def __init__(self, name, hurt, life_value): self.name = name self.hurt = hurt self.life_value = life_value def attack(self, name): name.life_value -= self.hurt class galen(role): camp = 'DE Marcia' def attack(self, name): # super(galen,self) 括号内第一个参数是自己的类名 逗号 self(对象),这样就可以专门引用父类属性。 super().attack(name) # 绑定方法self就可以不用传,python3后 super括号内可以不写, print('from galen class')
最新回复(0)