在子類中重用父類的屬性
阿新 • • 發佈:2018-03-17
size 繼承 rom elf attack 綁定 不用 pri lap
在子類中派生出新的方法重用父類的方法,有兩種實現方式
方式一:指名道姓(不依賴繼承)
class Hero: def __init__(self,name,damage,zing): self.name = name self.damage = damage self.zing = zing def attack(self,enemy): enemy.zing -= self.damage class Yang(Hero): def attack(self,enemy): Hero.attack(self,enemy)函數屬性的重用#指名道姓的重用方法,可以在非繼承的情況下使用 print("from Yang Class") pass class Lin(Hero): pass g1 = Yang(‘楊學偉‘,100,100) r1 = Lin(‘林書行‘,100,200) print(r1.zing) g1.attack(r1) print(r1.zing)
__init__方法的重用
方式二:super(依賴繼承)
class Hero: def __init__(self,name,damage,zing): self.name = name self.damage函數屬性的重用= damage self.zing = zing def attack(self,enemy): enemy.zing -= self.damage class Yang(Hero): def attack(self,enemy): super(Yang,self).attack(enemy) #super(Yang,self)是一個對象 ,依賴於繼承 print("from Yang Class") pass class Lin(Hero): pass g1 = Yang(‘楊學偉‘,100,100) r1= Lin(‘林書行‘,100,200) print(r1.zing) g1.attack(r1) print(r1.zing)
class Hero: def __init__(self,name,damage,zing): self.name = name self.damage = damage self.zing = zing def attack(self,enemy): enemy.zing -= self.damage class Yang(Hero): def __init__(self,name,damage,zing,weapon): # self.name = name # self.damage = damage # self.zing = zing # Hero.__init__(self,name,damage,zing) super(Yang,self).__init__(name,damage,zing) #super是一個對象,所以再綁定方法的時候不用加第一個參數 self.weapon = weapon def attack(self,enemy): Hero.attack(self,enemy) #指名道姓的重用方法,可以在非繼承的情況下使用 print("from Yang Class") pass g1 = Yang(‘楊學偉‘,100,100,‘聖劍‘) print(g1.__dict__)__init__方法的重用
super練習
#super class A: def f1(self): print("from A") super(A,self).f1() #super是基於C類的mro往後面尋找,而不A類的mro,所以可以去綁定B類的f1方法 class B: def f1(self): print("from B") class C(A,B): pass c = C() c.f1() # print(C.mro())
在子類中重用父類的屬性