名称空间:类的名称空间-->对象的名称空间
查询顺序:先从对象的名称空间去查,对象的空间没有此变量或者方法,通过对象中的类对象指针去类中寻找.
对象的问题:无论创建多少对象都是开辟独立的空间互相不能干扰查找
组合:就是给一个类的对象封装一个属性,这个属性是另一个变量的对象。
class Game_role:
def __init__(self, name, ad, hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,obj1):
obj1.hp = obj1.hp - self.ad
print('%s攻击%s,%s掉了%s血,还剩%s血'%(self.name,obj1.name,obj1.name,self.ad,obj1.hp))
def package_weapon(self,wea):
self.weapon = wea
class Sword:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def fight(self,p1,p2):
p2.hp = p2.hp - self.ad
print('%s 用 %s 砍了 %s一刀,%s 还剩%s血' %(p1.name,self.name,p2.name,p2.name,p2.hp))
aduan = Game_role('啊段', 10, 100)
ts = Game_role('泰森', 120, 300)
Slaughter_knife = Sword('杀猪刀',200)
# 下面是符合逻辑的
aduan.package_weapon(Slaughter_knife) # 给aduan 这个对象封装了一个weapon属性这个属性值为Slaughter_knife
aduan.weapon.fight(aduan,ts)
ts.attack(aduan)
# 这么写不好,动作的发起人是人而不是刀本身
# Slaughter_knife.fight(aduan,ts)