在子类中重用父类的方法

#在子类派生出新的方法中,重用父类的方法,有两种 :

 #1。指名道姓的方法(不依赖继承)

  #示例1:

class Hero:
def __init__(self,Nikname, Life_value, Aggressivity):
self.Nikname = Nikname
self.Aggressivity = Aggressivity
self.Life_value = Life_value
def attack(self,enemy):
enemy.Life_value-=self.Aggressivity

class Ruiwen(Hero):
camd = 'demaciy'
def attack(self, enemy):
Hero.attack(self, enemy) #指名道姓的方式 。此时,即使没有继承父类,此方法依然有效
print('from Ruiwen is attack')
class Kelun(Hero):
camd = '猪圈'
pass
g = Ruiwen('大圣', 100, 30)
r = Kelun('猪八戒', 80, 50)
print(r.Life_value)
g.attack(r)
print(r.Life_value)
#输出:

示例2:

class Hero:
def __init__(self,Nikname, Life_value, Aggressivity):
self.Nikname = Nikname
self.Aggressivity = Aggressivity
self.Life_value = Life_value
def attack(self,enemy):
enemy.Life_value-=self.Aggressivity

class Ruiwen(Hero):
camd = 'demaciy'
def __init__(self, Nikname, Life_value, Aggressivity, Weapon):
# self.Nikname = Nikname
# self.Life_value = Life_value
# self.Aggressivity = Aggressivity
self.Weapon = Weapon
Hero.__init__(self, Nikname, Life_value, Aggressivity)
def attack(self, enemy):
Hero.attack(self, enemy) #指名道姓的方式 。此时,即使没有继承父类,此方法依然有效
print('from Ruiwen is attack')
class Kelun(Hero):
camd = '猪圈'
pass
g = Ruiwen('大圣', 100, 30, '金箍棒')
print(g.__dict__)

#输出:

 

 
 
 
 

 #2.super()   依赖于继承

#示例1:

class Hero:
def __init__(self,Nikname, Life_value, Aggressivity):
self.Nikname = Nikname
self.Aggressivity = Aggressivity
self.Life_value = Life_value
def attack(self,enemy):
enemy.Life_value-=self.Aggressivity

class Ruiwen(Hero):
camd = 'demaciy'
def __init__(self, Nikname, Life_value, Aggressivity, Weapon):
super().__init__(Nikname, Life_value, Aggressivity)
self.Weapon = Weapon
def attack(self, enemy):
print('from Ruiwen is attack')
class Kelun(Hero):
camd = '猪圈'
pass
g = Ruiwen('大圣', 100, 30, '金箍棒')
r = Kelun('猪八戒', 80, 50)
g.attack(r)
print(r.Life_value)





示例2:
 
 
class Hero:
def __init__(self,Nikname, Life_value, Aggressivity):
self.Nikname = Nikname
self.Aggressivity = Aggressivity
self.Life_value = Life_value
def attack(self,enemy):
enemy.Life_value-=self.Aggressivity

class Ruiwen(Hero):
camd = 'demaciy'
def __init__(self, Nikname, Life_value, Aggressivity, Weapon):
super().__init__(Nikname, Life_value, Aggressivity)
self.Weapon = Weapon
def attack(self, enemy):
print('from Ruiwen is attack')
class Kelun(Hero):
camd = '猪圈'
pass
g = Ruiwen('大圣', 100, 30, '金箍棒')
r = Kelun('猪八戒', 80, 50)
g.attack(r)
print(r.Life_value)

#输出:

 

 
 



class A:
def f1(self):
print('from A')
super().f1()
class B:
def f1(self):
print('from B')

class C(A, B):
pass
c = C()
c.f1()
print(C.mro())

#输出:

#这里不要以为super在A里面 且A为比较顶层,会找不到B里面的f1 这样想是错误的,应当先明白f1是基于谁去寻找的,它是C的实例化对象c去调用的f1

#然后在A里面找到了f1打印了f1里面的内容,但是随之又遇见super,此时super会基于C的调用f1接着向上从A函数属性里面按照广度查找的方式继续按照mro列表继续向后找,直到

找到打印为止

 

转载于:https://www.cnblogs.com/yuexijun/p/10239091.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值