python学习Day17--名称空间

一、基本知识点

 1、# 查询顺序: 

  对象.属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找.... 

  类名.属性 : 先从本类空间找,如果找不到,再从父类找....

  对象与对象之间是互相独立的.

2、组合:给一个类的对象封装一个属性,这个属性是另一个类的对象

  下面通过代码例子进行说明:

 1 版本一:添加武器:斧子,刀,枪,棍,棒...,
 2 class GameRole:
 3     def __init__(self, name, ad, hp):
 4         self.name = name
 5         self.ad = ad
 6         self.hp = hp
 7 
 8     def attack(self,p):
 9         p.hp = p.hp - self.ad
10         print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
11 
12 class Weapon:
13     def __init__(self,name,ad):
14         self.name = name
15         self.ad = ad
16     def fight(self,p1,p2):
17         p2.hp = p2.hp - self.ad
18         print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
19               % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
20 
21 p1 = GameRole('大阳哥',20,500)
22 p2 = GameRole('印度阿宁',50,200)
23 axe = Weapon('三板斧',60)
24 broadsword = Weapon('屠龙宝刀',100)
25 axe.fight(p1,p2)
26 broadsword.fight(p2,p1)
27 
28 p1.attack(p2)

  其中不合理的地方是:人物利用武器攻击别人,你的动作发起者是人,而不是武器。其中第8行后人第16行里的p,p1,p2都是对象空间。

 1 # 版本二:
 2 class GameRole:
 3     def __init__(self, name, ad, hp):
 4         self.name = name
 5         self.ad = ad
 6         self.hp = hp
 7 
 8     def attack(self,p):
 9         p.hp = p.hp - self.ad
10         print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
11 
12     def armament_weapon(self,wea):
13         self.wea = wea
14 
15 
16 class Weapon:
17     def __init__(self,name,ad):
18         self.name = name
19         self.ad = ad
20     def fight(self,p1,p2):
21         p2.hp = p2.hp - self.ad
22         print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
23               % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
24 
25 p1 = GameRole('大阳哥',20,500)
26 p2 = GameRole('印度阿宁',50,200)
27 axe = Weapon('三板斧',60)
28 broadsword = Weapon('屠龙宝刀',100)
29 # print(axe)
30 p1.armament_weapon(axe)  # 给大阳哥 装备了三板斧这个对象.
31 # print(p1.wea)
32 # print(p1.wea.name)
33 # print(p1.wea.ad)
34 p1.wea.fight(p1,p2)

  在GameRole类中加入了动态变量armament_weapon,给一个对象属性封装了另一个对象。具体过程如下:

 

 面向对象资料参考:https://www.cnblogs.com/jin-xin/articles/9157737.html

猜你喜欢

转载自www.cnblogs.com/fengxb1213/p/12294604.html