Python----面向对象--派生

派生是指子类可以有自己的特有属性,示例代码如下:

 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

以上结果说明,属性的查找顺序为对象自身,所属类中依次去查找

原文地址:https://www.cnblogs.com/xudachen/p/8592753.html