派生是指子类可以有自己的特有属性,示例代码如下:
1 class Hero: 2 def __init__(self, nick_name, life_value, aggresivity): 3 self.nick_name = nick_name 4 self.life_value = life_value 5 self .aggresivity = aggresivity 6 7 def attack(self, enemy): 8 enemy.life_value -= self.aggresivity 9 10 11 class Garen(Hero): 12 camp = 'Demacia' 13 14 15 class Riven(Hero): 16 camp = 'Noxus' 17 18 19 g1 = Garen('草丛伦', 100, 30) 20 print(g1.camp)
结果为:
Demacia
从结果可以看出,能够访问g1的特有属性camp
派生属性并不影响正常代码执行:
1 class Hero: 2 def __init__(self, nick_name, life_value, aggresivity): 3 self.nick_name = nick_name 4 self.life_value = life_value 5 self .aggresivity = aggresivity 6 7 def attack(self, enemy): 8 enemy.life_value -= self.aggresivity 9 10 11 class Garen(Hero): 12 camp = 'Demacia' 13 14 15 class Riven(Hero): 16 camp = 'Noxus' 17 18 19 g1 = Garen('草丛伦', 100, 30) 20 r1 = Riven('锐雯雯', 80, 50) 21 g1.attack(r1) 22 print(r1.life_value) 23 24 结果为: 25 50
在Garen类中添加一个attack函数,会发生什么变化
1 class Hero: 2 def __init__(self, nick_name, life_value, aggresivity): 3 self.nick_name = nick_name 4 self.life_value = life_value 5 self .aggresivity = aggresivity 6 7 def attack(self, enemy): 8 enemy.life_value -= self.aggresivity 9 10 11 class Garen(Hero): 12 camp = 'Demacia' 13 14 def attack(self, enemy): 15 print('from Garen class') 16 17 18 class Riven(Hero): 19 camp = 'Noxus' 20 21 22 g1 = Garen('草丛伦', 100, 30) 23 r1 = Riven('锐雯雯', 80, 50) 24 g1.attack(r1) 25 # print(r1.life_value) 26 27 结果为: 28 from Garen class
以上结果说明,属性的查找顺序为对象自身,所属类中依次去查找