面向对象中组合的用法

# 组合  一个类对象的属性值是另外一个类的对象

#
class Dog:
    def __init__(self, name, aggr, hp, kind):
        self.name = name
        self.aggr = aggr
        self.hp = hp
        self.kind = kind


    def bite(self, persion):
        persion.hp += self.aggr

#
class Persion:
    def __init__(self, name, aggr, hp, sex):
        self.name = name
        self.aggr = aggr
        self.hp = hp
        self.sex = sex
        self.money = 0

    def attack(self, dog):
        dog.hp -= self.aggr

    def get_weapon(self, weapon):   # 获得装备
        if self.money >= weapon.price:
            self.money -= weapon.price
            # 对象没有这个属性值则会创建一个weapon属性值
            self.weapon = weapon    # 一个对象的属性值是另外一个类的对象   组合
            self.aggr += weapon.aggr
        else:
            print('金币不足,请获取足够金币')

# 武器
class Weapon:
    def __init__(self, name, aggr, njd, price):
        self.name = name
        self.aggr = aggr
        self.njd = njd
        self.price = price
    def hand18(self, persion):  # 武器技能
        if self.njd > 0:
            persion.hp -= self.aggr * 2
            self.njd -= 1

alex = Persion('alex', 0.5, 100, '不详')
jin = Dog('金老板', 100, 500, '不详')
w = Weapon('打狗棒', 100, 3, 998)

# alex充了1000金币
alex.money += 1000

# alex买了打狗棒
alex.get_weapon(w)
print(alex.weapon)
print(alex.aggr)

# alex攻击了jin
alex.attack(jin)
print(jin.hp)

# alex使用武器的技能攻击jin
alex.weapon.hand18(jin)
print(jin.hp)

# 上面的例子其实就默默的用到了组合
# 组合:一个对象的属性值是另外一个类的对象
    # alex.weapon 是 Weapon类的对象



# 组合练习(谈到组合,就不只是一个类去解决问题)
# 创建一个老师类
# 老师有生日
# 生日可以是一个类
class Birthday:
    def __init__(self, year, mon, day):
        self.year = year
        self.mon = mon
        self.day = day

class Teacher:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
        self.birthday = Birthday(1993, 8, 1)    # 组合用法一个对象的属性值是另外一个类的对象

#
t = Teacher('why', 23, 'boy')
print(t.birthday.year)

# 大作业,校园管理系统

 

posted @ 2018-10-02 11:47  _小溢  阅读(469)  评论(0)    收藏  举报