在子类中重用父类的属性

Posted nanjo4373977

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在子类中重用父类的属性相关的知识,希望对你有一定的参考价值。

在子类派生出的新的方法中重用父类的方法,有两种实现方式

一、指名道姓(不依赖继承)

class Hero:
    def __init__(self,nickname,life_value,aggresivity):
        self.nickname = nickname
        self.life_value = life_value
        self.aggresivity = aggresivity

    def attack(self,enemy):
        enemy.life_value -= self.aggresivity

class Libai(Hero):
    camp = "Tangchao"
    def __init__(self,nickname,life_value,aggresivity,weapon):
        Hero.__init__(self,nickname,life_value,aggresivity)
        self.weapon = weapon
    def attack(self,enemy):
        Hero.attack(self,enemy)  # 指名道姓,有几个参数就需要传几个参数
        print("from Libai Class")

class Huamulan(Hero):
    camp = "Changcheng"

l1 = Libai("进一步",100,60,"")

二、super()()(依赖继承关系)

class Hero:
    def __init__(self,nickname,life_value,aggresivity):
        self.nickname = nickname
        self.life_value = life_value
        self.aggresivity = aggresivity

    def attack(self,enemy):
        enemy.life_value -= self.aggresivity

class Libai(Hero):
    camp = "Tangchao"
    def __init__(self,nickname,life_value,aggresivity,weapon):
        #Hero.__init__(self,nickname,life_value,aggresivity)

        #super(Libai,self).__init__(nickname,life_value,aggresivity)  # python2的写法
        super().__init__(nickname,life_value,aggresivity)  # python3的写法
        self.weapon = weapon
    def attack(self,enemy):
        super(Libai,self).attack(enemy)  # 依赖继承  super(Libai,self)是指对象,.attack是调用对象的方法
        print("from Libai Class")

class Huamulan(Hero):
    camp = "Changcheng"

l1 = Libai("进一步",100,60,"")

这两种方式的区别是:方式一是跟继承没有关系的,而方式二的super()是依赖于继承的,并且即使没有直接继承关系,super仍然会按照mro继续往后查找

#A没有继承B,但是A内super会基于C.mro()继续往后找
class A:
    def test(self):
        super().test()
class B:
    def test(self):
        print(from B)
class C(A,B):
    pass

c=C()
c.test() #打印结果:from B


print(C.mro())
#[<class ‘__main__.C‘>, <class ‘__main__.A‘>, <class ‘__main__.B‘>, <class ‘object‘>]

以上是关于在子类中重用父类的属性的主要内容,如果未能解决你的问题,请参考以下文章

在子类中重用父类的方法或属性

在子类中重用父类的方法和属性

JAVA中,子类将继承父类的所有属性和方法么~?为啥?

Python之面向对象的组合多态菱形问题子类中重用父类的两种方式

类的继承和重用

继承与派生