python中有关“依赖”和“组合”的描述

这篇算作是我的一个学习笔记吧。

python中的“依赖”,“组合”和“继承”有着异曲同工之处,本质都是一个类调用另一个类的属性或方法。“继承”是在两个类有继承关系才会被使用,而“依赖”和“组合”则是在两个看似没有什么关联的类中使用。

下面为了更好的描述这两个词语,我假设一个场景:有一只猫,但很可怜,它生下来就没有嘴巴,而这边呢只有一个孤苦伶仃的嘴巴(只是一个嘴巴,没有其他东西,诸如身体之类的)。一个没有嘴巴,一个没有身体,真奇怪,真奇怪… 有一天呢,这两个楚楚相惜的小东西相遇了,从此它们便相依为命,互不离弃。当小猫需要吃东西时,它便需要“依赖”嘴巴这个小东西的帮忙,通过这个嘴巴来吃。当嘴巴需要运动时,便要“依赖”小猫的身体来运动。

开始对“依赖”做一个简单描述:

class Cat():      # 定义一个猫类
    def __init__(self, color, age):
        self.color = color
        self.age = age

    def eat(self, obj):    # 猫的一个吃的方法
        obj.eat()


class Mouth():     # 定义一个嘴类
    def eat(self):     # 嘴也会吃东西
        print("I was eating")
        
mouth = Mouth()    # 一个嘴叫mouth
cat = Cat("blue", 2)    #一个猫叫cat
cat.eat(mouth)    # 猫开始吃东西

输出结果:
在这里插入图片描述
当小猫想吃东西时,就要借助嘴巴的eat()功能去实现小猫想吃东西的梦想,于是嘴巴就满足它这卑微的梦想。也就是把嘴巴mouth 这个对象当作参数传入到小猫的eat()方法中,再在小猫的eat()方法中去调用嘴巴的eat()方法,从而就实现了小猫的梦想。这就是“依赖”。

下面是“组合”:
还是一个小猫,但这个小猫比较幸运。当它还在它母亲肚子里的时候,就有一个嘴巴主动找上门来说:“我想和你在一起,一辈子不分开的那种”,小猫一听,心中大喜,便爽快的答应了。于是这个小猫一出生便有了嘴巴
代码描述:

class Cat():      # 定义一个猫类
    def __init__(self, color, age, obj):
        self.color = color
        self.age = age
        self.mouth = obj    # 定义嘴巴的一个mouth属性,传入的是下面的mouth对象

    def eat(self):
        self.mouth.eat()    # 调用对象cat下的mouth属性的eat()方法


class Mouth():     # 定义一个嘴类
    def eat(self):     # 嘴也会吃东西
        print("I was eating")


mouth = Mouth()
cat = Cat("blue", 2, mouth)
cat.eat()    # 小猫吃东西

运行结果如上。

当这个小猫想要吃东西时,就直接吃好了,不用再顾虑嘴巴的感受了。因为小猫还没出生时,就有嘴巴来和它“组合”了,小猫自带嘴巴。在实例化小猫时,小猫就已经有一个mouth属性了。

所以“依赖”和“组合”的差别只有那么一点。“依赖”是把一个类的对象当作参数传入到另一个类的普通方法中。“组合”是把一个类的对象当作参数传入到另一个类的构造方法中。

虽然这两个简单的概念可以用一两句话就可以描述出来,但突然就想用这种方式描述,我也不知道好不好,清不清楚。

个人理解,如有错误或浅薄处,还请指出。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值