1. 程式人生 > >面向物件-在子類使用父類的物件或屬性

面向物件-在子類使用父類的物件或屬性

在子類派生出的新方法中 重用父類分方法,有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__)