面向对象中组合的用法

Posted whylinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象中组合的用法相关的知识,希望对你有一定的参考价值。

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

#
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)

# 大作业,校园管理系统

 技术分享图片

以上是关于面向对象中组合的用法的主要内容,如果未能解决你的问题,请参考以下文章

面向对象的组合用法

类命名空间与对象实例的命名空间 and 面向对象的组合用法

类命名空间与对象实例的命名空间和下面向对象的组合用法

面向对象--继承和组合

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程