Python学习笔记-Day16

今日大纲

一、面向对象的组合

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

组合的意义:让一个类的对象和另一个类的对象产生关系,让一个类和另一个类产生关系

如何组合:

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血

原文地址:https://www.cnblogs.com/tian-tian/p/9530215.html