面向对象-在子类使用父类的对象或属性

在子类派生出的新方法中 重用父类分方法,有2种

1、指名道姓(不依赖继承)   2、super()依赖继承

在子类派生出的新方法中 重用父类分方法,有2种
#1、指名道姓(不依赖与继承)

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 Garen(Hero):
    camp='Demacia' # 自己派生

    def attack(self,enemy):
        Hero.attack(self,enemy) # 指名道姓使用父类(在子类有方法情况下)
        print('ssss')


class Reven(Hero):
    camp = 'Noxus'
    def __init__(self,nickname,life_value,aggresivity,weapon): #增加武器
        Hero.__init__(self,nickname,life_value,aggresivity) # 其他引用父类

        self.weapon = weapon # 自己单独 增加 武器这个属性


g=Garen('草丛伦',100,30)
r=Reven('瑞文',80,50)

print(r.life_value)
g.attack(r)
print(r.life_value)

#2、super() (依赖于继承) :引用所在位置,mro列表中下一个值

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 Garen(Hero):
    camp='Demacia' # 自己派生
    def __init__(self,nickname,life_value,aggresivity,weapon):
        super().__init__(nickname,life_value,aggresivity) # 引用父类的代码
        self.weapon = weapon
    def attack(self,enemy):
        super(Garen,self).attack(enemy)# 核心:依赖于继承
        print('from Garen Class')


class Reven(Hero):
    camp = 'Noxus'


g = Garen('草丛伦',100,30,'胫骨帮')
r = Reven('芮雯雯',80,50)

g.attack(r)
print(r.life_value)
print(g.__dict__)

猜你喜欢

转载自www.cnblogs.com/hexiaorui123/p/10201404.html