今日大纲
一、面向对象的组合
组合:给一个类的对象封装一个属性,这个属性就是另一个类的对象
组合的意义:让一个类的对象和另一个类的对象产生关系,让一个类和另一个类产生关系
如何组合:
1、在类1中定义一个方法,类1的对象1在执行这个方法的时候能增加一个属性,属性值就是类2的对象2
2、对象1执行这个方法,增加一个属性值是类2的对象2
3、类1.属性名.类2中的方法,就以类1为主体执行了类2的方法
class Gamerole: def __init__(self,name,ad,hp): self.name = name self.hp = hp self.ad = ad def attack(self,role): role.hp = role.hp - self.ad print('%s攻击%s,%s掉了%s血,还剩%s血' % (self.name,role.name,role.name,self.ad,role.hp)) def equip_weapon(self,w): #定义一个方法,让Gamerole的对象可以产生一个新的属性,属性名是weapon,属性值是Weapon的对象 self.weapon = w class Weapon: def __init__(self,name,ad): self.name = name self.ad = ad def fight(self,role1,role2): role2.hp = role2.hp - self.ad print('%s用%s攻击%s,%s掉了%s血,还剩%s血' %(role1.name,self.name,role2.name,role2.name,self.ad,role2.hp)) p1 = Gamerole('盖伦',20,500) p2 = Gamerole('剑豪',100,200) # p1.attack(p2) w1 = Weapon('大宝剑',30) w2 = Weapon('武士刀',80) # w1.fight(p1,p2) #刀是主体,不合规范 盖伦用大宝剑攻击剑豪,剑豪掉了30血,还剩170血 p1.equip_weapon(w1) #执行方法,给对象p1增加一个属性weapon,属性值是Weapon的对象w1 # print(p1.weapon) #<__main__.Weapon object at 0x000001FF47997AC8> # print(w1) #<__main__.Weapon object at 0x000001FF47997AC8> p1.weapon.fight(p1,p2) #盖伦用大宝剑攻击剑豪,剑豪掉了30血,还剩170血