Python面向对象OOP编程(四)--对象间的组合关系

对象间的组合关系说白了就是,一个类的实例作为另一个类的属性。

出现这种关系的原因是(假设类A的实例作为了类B的属性(也别管是类属性还是成员属性了,反正是属于类或者属于实例B的这么一个属性 )  ):类B太复杂了,如果所有的内容全都写在类B中,太乱了。

比如接下来人狗大战的例子,如果雾气不单独拎出来做一个类的话,那么人的类的类属性终究会多了很多属于不同武器的属性,比如刀的名字,攻击值;棍子的名字,棍子的攻击值等等,就会很乱,现在把这些武器归结在一个武器类中,看起来就好很多

而且,这些武器如果在复杂一些,也可以单开一个类的,比如刀类,棍子类啥的

但是由于以下的例子简单,就直接把刀和棍子一起写在武器类里面了,,,,

然后注意一下:

①类A是实体作为类B的属性,所以,用的时候得将类A实例化啊

②其次就是,Python中函数内是可以定义变量的,可以当做简单类的属性去用一用(如果类不复杂,想这个例子中的枪支和棍子类)

代码如下:

#同一个类,不同实例之间 的 交互关系
class Weapon:
    def knife(self,obj_people,obj_dog):
        obj_dog.health_point -= 30
        print(obj_people.name,"拿刀打狗",obj_dog.name,"使得狗掉了30的血,现在狗的血量为:",obj_dog.health_point)

    def stick(self,obj_people,obj_dog):
        obj_dog.health_point -= 20
        print(obj_people.name,"拿棍子打狗",obj_dog.name,"使得狗掉了30的血,现在狗的血量为:",obj_dog.health_point)

class Dog:
    def __init__(self,dname):
        self.name = dname
        self.health_point = 100
    def Info(self):
        print(self.name,"此时有血量为:",self.health_point)

class People:
    def __init__(self,pname,page):
        self.name = pname
        self.age = page
        self.health_point = 100
        self.weapon = Weapon()

p1 = People('zch',23)
d1 = Dog('京巴')
p1.weapon.knife(p1,d1)
p1.weapon.stick(p1,d1)
d1.Info()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值