面向对象-子类重用父类同名方法或同名属性

子类中派生出的新的方法重用父类的方法

方式一:指名道姓,不依赖继承

指名道姓的调用,不依赖继承

class Hero:
    def __init__(self,nickname,life_value,aggresivity):
        self.nickname=nickname
        self.life_value=life_value
        self.aggersivity=aggresivity
    def attack(selfs,enemy):
        enemy.life_value -= selfs.aggersivity

class Garen(Hero):
    camp='Demacia'
    def attack(selfs,enemy):
        Hero.attack(selfs,enemy)#指名道姓的调用,不依赖继承
        print("grom Garen Class")
class Riven(Hero):
    camp='Noxus'
g=Garen('草丛伦',100,30)
r=Riven("锐雯雯",90,40)

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

子类初始化的对象调用父类方法

class Hero:
    def __init__(self,nickname,life_value,aggresivity):
        self.nickname=nickname
        self.life_value=life_value
        self.aggersivity=aggresivity
    def attack(selfs,enemy):
        enemy.life_value -= selfs.aggersivity

class Garen(Hero):
    camp='Demacia'
    def __init__(self,nickname,life_value,aggresivity,weapon):
        Hero.__init__(self,nickname,life_value,aggresivity)#指名道姓的调用,子类派生的新的方法调用父类方法,不依赖继承
        self.weapon=weapon
    def attack(selfs,enemy):
        Hero.attack(selfs,enemy)#指名道姓的调用,不依赖继承
        print("grom Garen Class")

g=Garen('草丛伦',100,30,'金箍棒')

方式二:super()方法引用父类方法,依赖继承

class Hero:
    def __init__(self,nickname,life_value,aggresivity):
        self.nickname=nickname
        self.life_value=life_value
        self.aggersivity=aggresivity
    def attack(selfs,enemy):
        enemy.life_value -= selfs.aggersivity

class Garen(Hero):
    def attack(self,enemy):
        super(Garen,self).attack(enemy)#super()依赖继承
        print("grom Garen Class")
class Riven(Hero):
    pass
g=Garen('草丛伦',100,30)
r=Riven('锐雯雯',80,50)
print(r.life_value)
g.attack(r)
print(r.life_value)

class Hero:
    def __init__(self,nickname,life_value,aggresivity):
        self.nickname=nickname
        self.life_value=life_value
        self.aggersivity=aggresivity
    def attack(selfs,enemy):
        enemy.life_value -= selfs.aggersivity

class Garen(Hero):
    def __init__(self,nickname,life_value,aggresivity,weapon):   
        super(Garen,self).__init__(nickname,life_value,aggresivity)#super(Garen,self)表示绑定方法,所以执行__init__无需传入self参数
        self.weapon=weapon
    def attack(self,enemy):
        super(Garen,self).attack(enemy)#super()依赖继承
        print("grom Garen Class")
class Riven(Hero):
    pass
g=Garen('草丛伦',100,30,"金箍棒")
print(g.__dict__)

 

posted @ 2018-04-17 21:55  丫丫625202  阅读(683)  评论(0编辑  收藏  举报