1. 程式人生 > >在子類中重用父類的屬性

在子類中重用父類的屬性

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())

在子類中重用父類的屬性