对象与对象之间的关系
1.依赖关系! 我可以随时用你,但你不属于我。举例:大象把自己关进冰箱。
冰箱的功能非常简单, 只要会开门关门就行了. 但是大象就没那么简单了,想想,
大象开门和关门的时候是不是要先找个冰箱啊, 然后呢?
打开冰箱门,是不是打开刚才找到的那个冰箱门, 然后装自己,最后呢? 关冰箱门,
注意, 关的是刚才那个冰箱吧. 也就是说, 开门和关门用的是一个冰箱,并且大象有更换冰箱的权利,
想进哪个冰箱就进哪个冰箱. 这时, 大象类和冰箱类的关系并没有那么的紧密,
因为大象可以指定任何一个冰箱. 接下来,演示一下.
实现代码
// An highlighted block
class Elphant:
def __init__(self, name): 注意!这里没有接收对象。所以不属于。
self.name = name
def open(self, ref):
print("大象要开门了. 默念三声. 开!")
# 由外界传递进来一个冰箱, 让冰箱开门, 这时大象不用背着冰箱到处跑.
# 类与类之间的关系也就不那么的紧密了, 换句话说, 只要是有open_door()方法的对象. 都可以接收运行
ref.open_door()
def close(self, ref):
print("大象要关门了. 默念三声. 关!")
ref.close_door()
pass
def take(self):
print("钻进去")
class Refrigerator:
def open_door(self):
print("冰箱门被打开了")
def close_door(self):
print("冰箱门被关上了")
# 造冰箱
r = Refrigerator()
# 造大象
el = Elphant("神奇的大象")
el.open(r) # 注意,此时是把一个冰箱作为参数传递进去了,也就是说,大象可以指定任何一个冰箱.
el.take()
el.close(r)
说白了 就时把一个类当对象传过去(类的方法中的参数接受),传过去后,在内部调用这个类的方法,岂不美哉
这种关系,就是兼职关系,用你你就来,不用就给我gun。
2.关联关系.组合关系.聚合关系
其实这三个在代码上写法是一样的. 但是, 从含义上是不一样的.
2.1 关联关系: 两种事物必须是互相关联的,但是在某些特殊情况下是可以更改和更换的
举例子 你和女朋友,/学校和老师。需要她,她也是你的。
// An highlighted block
class Boy:
def __init__(self, name, girlFriend=None):#这里将对象传到了构造函数里。
self.name = name
self.girlFriend = girlFriend
def have_a_dinner(self):
if self.girlFriend:
print("%s 和 %s⼀起去吃晚餐" % (self.name, self.girlFriend.name))
else:
print("单身狗. 吃什么饭")
class Girl:
def __init__(self, name):
self.name = name
b = Boy("alex")
b.have_a_dinner()
# 突然牛B了. 找到女朋友了
g = Girl("如花")
b.girlFriend = g # 有女朋友了. 6666
b.have_a_dinner()
gg = Girl("李小花")
bb = Boy("wusir", gg) # 娃娃亲. 出生就有女朋友. 服不服
bb.have_a_dinner() # 多么幸福的一家
# 突然.bb失恋了. 娃娃亲不跟他好了
bb.girlFriend = None
bb.have_a_dinner() # 又单身了 没有这个对象 则不能 进行吃饭方法。
2.2 聚合关系: 属于关联关系中的一种特例,侧重点是xxx和xxx聚合成xxx. 各自有各自的生命周期, 比如电脑,电脑里有CPU,
硬盘, 内存等等,电脑挂了, CPU还是好的,还是完整的个体
比如一个学校 可以有一堆老师。 老师只能属于一个学校。但双方相互离开都还是个体。
2.3 组合关系: 属于关联关系中的一种特例, 写法上差不多,组合关系比聚合还要紧密,比如人的大脑, 心脏, 各个器官.
这些器官组合成一个人. 这时人如果挂了,其他的东西也跟着挂了.