类的依赖,关联,聚合,组合(Python)

本文通过一个综合的LOL游戏场景,展示了类之间的组合、聚合、关联和依赖关系。Canyon类代表峡谷,LOL_Role类代表英雄,unique_weapon类代表武器,Blood_bottle类代表血瓶,Doran_sword类代表多兰剑。类的依赖体现在亚索使用血瓶恢复血量;关联体现在峡谷与英雄之间的关系;聚合体现在多兰剑增强亚索攻击力;组合体现在无鞘之刃与亚索的结合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类关系的综合例子:

  1. 类关系的强弱程度:组合>聚合>关联>依赖
  2. 具体类之间的关系需要通过具体的语义,才能做出合理的判断
类的关系关系的初解
组合整体与部件的关系,整体删除,部件也会删除。
聚合整体删除,部件不会删除,多个整体可共享的同一部件
关联相互依存,互相贯连
依赖偶然用到,A偶然用到B,B的变化又会影响到A
  1. 举个综合的例子:

请添加图片描述

class Canyon:
    def __init__(self,name,crystal,grass,wild,tower,Role):
        self.name=name
        self.crystal=crystal
        self.grass=grass
        self.wild=wild
        self.tower=tower
        self.Role = Role
    def spot(self,Role):
        print(f"{Role.name}拥有{Role.hp}血量,在{self.name}的{self.grass}蹲线")



class LOL_Role:
    def __init__(self,name,ad_or_ap,hp):
         self.name=name
         self.ad_or_ap=ad_or_ap
         self.hp=hp
    def Use_Blood_bottle(self,bottle):
        self.bottle=bottle
    def Use_weapon(self,w):
        self.w=w
        print(f"{self.name}使用{w.name},武器类型为{w.type},武器距离{w.distance},武器攻击伤害{w.ad_or_ap}")
    def add_w(self,Role,sword):
        self.Role=Role
        self.swod=sword
        self.ad_or_ap=Role.ad_or_ap+sword.ad
        print(f"出完多兰剑后{self.name}当前基础攻击是{self.ad_or_ap}")


class unqiue_weapon:
    def __init__(self,name,weapon_type,distance,ad_or_ap):
        self.name=name
        self.type=weapon_type
        self.distance=distance
        self.ad_or_ap=ad_or_ap
    def add_wq(self,weqpon,sword):
        self.weqpon=weqpon
        self.sword=sword
        self.ad_or_ap=weqpon.ad_or_ap+sword.ad
        print(f"{self.name}属于{self.type},攻击距离{self.distance},当前伤害{self.ad_or_ap}")

class Blood_bottle:
    def __init__(self,name,hpr):
        self.name=name
        self.hpr=hpr
    def Click_use(self,Role):
        print(f"{Role.name}使用了{self.name},在15秒内恢复了{self.hpr}的血量")


class Doran_sword:
    def __init__(self,name,ad):
        self.name=name
        self.ad=ad


LOL_Role1=LOL_Role('亚索',60,490)
Blood_bottle1=Blood_bottle("血瓶",150)
Canyon_main=Canyon('峡谷','水晶','中下草','buff','塔',LOL_Role1)
Doran_sword1=Doran_sword('多兰剑',7)
weapon1=unqiue_weapon('无鞘之刃','弯刃',175,53.2)
Blood_bottle1.Click_use(LOL_Role1)
LOL_Role1.Use_Blood_bottle(Blood_bottle1.Click_use(LOL_Role1))   #亚索与血瓶是依赖关系
Canyon_main.spot(LOL_Role1)
LOL_Role1.Use_weapon(weapon1)
LOL_Role1.add_w(LOL_Role1,Doran_sword1)
weapon1.add_wq(weapon1,Doran_sword1)

运行结果:

亚索使用了血瓶,在15秒内恢复了150的血量
亚索使用了血瓶,在15秒内恢复了150的血量
亚索拥有490血量,在峡谷的中下草蹲线
亚索使用无鞘之刃,武器类型为弯刃,武器距离175,武器攻击伤害53.2
出完多兰剑后亚索当前基础攻击是67
无鞘之刃属于弯刃,攻击距离175,当前伤害60.2
  1. 类代码:
    Canyon类:峡谷类;
    LOL_Role类:英雄类;
    unqiue_weapon类:专属武器类;
    Blood_bottle类:血瓶类;
    Doran_sword类:多兰剑类。
  2. 类的依赖:亚索使用了血瓶,血瓶的使用使得亚索恢复了150血量。
  3. 类的关联: 峡谷与一个峡谷英雄之间的关系,峡谷就那么大,有那么多东西,并不会因为英雄的改变而改变。
  4. 类的聚合: 多兰剑可以给亚索加基础攻击,也可以让亚索武器附加攻击伤害。
  5. 类的组合: 亚索使用的无鞘之刃,删除亚索,也会删除无鞘之刃。
类的关系关系的深入
组合将B对象封装到A对象的属性中,B只给A当属性使用
聚合A对象可以包含B对象,但B对象不是A对象的组成部分,只拥有部分
关联A对象可以使用的B对象的公共属性和操作
依赖A对象可以通过自身方法去调用B对象下的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值