组合

"is-a"关系,我们可以使用"继承"。
"has-a"关系,我们可以使用"组合"。

继承和组合,其真谛都是实现代码的复用

#继承实现代码的复用
class A1:
    def say_a1(self):
        print("a1-a1")

class B1(A1):
    pass

b1=B1()
b1.say_a1()
#结果:a1-a1



#组合实现代码的复用
class A2:
    def say_a2(self):
        print("a2-a2")

class B2:
    def __init__(self,a):
        self.a=a

b2=B2(A2())    #把A2对象作为参数传递给B2的构造方法,因此实例属性a就指向了A2对象地址
b2.a.say_a2()  #B2对象的实例属性a,a再去调用A2对象的方法say_a2()
#结果:a2-a2
组合_第1张图片
组合方式复用代码.png

你可能感兴趣的:(组合)