Python3.7之派生
子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准。
派生就是子类在继承父类的基础上衍生出新的属性。子类中独有的,父类中没有的;或子类定义与父类重名的东西。子类也叫派生类。
class Hero:
camp = 'Hero' # 父类原有的camp数据属性
def __init__(self, nickname, attack_value, life_value):
self.nickname = nickname
self.attack_value = attack_value
self.life_value = life_value
def attack(self, enemy):
enemy.life_value -= self.attack_value
class Garen(Hero):
camp = 'Demacia'
class Riven(Hero):
camp = 'Noxus'
role1 = Garen('A', 50, 100)
role2 = Riven('B', 30, 80)
print(role1.camp)
print(role2.camp)
'''
Demacia
Noxus
'''
在子类中,新建的重名的函数属性,在编辑函数内功能的时候,有可能需要重用父类中重名的那个函数功能,应该是用调用普通函数的方式,即:类名.func(),此时就与调用普通函数无异了,因此即便是self参数也要为其传值。
class Garen(Hero):
def __init__(self, nickname, attack_value, life_value, skin):
Hero.__init__(self, nickname, attack_value, life_value)
# 调用父类功能,注意这里必须要有self
self.skin = skin # 新属性
def attack(self, enemy):
Hero.attack(self, enemy) # 调用父类功能,参数必须与父类一致
print('From Garen') # 自己新的功能
camp = 'Demacia'
严格来说,上述Hero.__init__(self,...),不能算作子类调用父类的方法。因为我们如果去掉(Hero)这个继承关系,代码仍能得到预期的结果。