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

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
- 类代码:
Canyon类:峡谷类;
LOL_Role类:英雄类;
unqiue_weapon类:专属武器类;
Blood_bottle类:血瓶类;
Doran_sword类:多兰剑类。 - 类的依赖:亚索使用了血瓶,血瓶的使用使得亚索恢复了150血量。
- 类的关联: 峡谷与一个峡谷英雄之间的关系,峡谷就那么大,有那么多东西,并不会因为英雄的改变而改变。
- 类的聚合: 多兰剑可以给亚索加基础攻击,也可以让亚索武器附加攻击伤害。
- 类的组合: 亚索使用的无鞘之刃,删除亚索,也会删除无鞘之刃。
类的关系 | 关系的深入 |
---|
组合 | 将B对象封装到A对象的属性中,B只给A当属性使用 |
聚合 | A对象可以包含B对象,但B对象不是A对象的组成部分,只拥有部分 |
关联 | A对象可以使用的B对象的公共属性和操作 |
依赖 | A对象可以通过自身方法去调用B对象下的方法 |