組合
- 當希望「子類別的動作」大都與它的父類別相同時(當子 is-a 父時),繼承是一種很棒的技術
- 打造精緻的繼承層次是很吸引人,但是有時使用組合(composition) 或聚合(aggregation)比較合理
- 鴨子 is-a 鳥類,但 has-a 尾巴 → 尾巴不是鴨子,卻是鴨子的一部分
【範例】製作 bill 與 tail 物件,並將它們提供給新的 duck 物件
>>> class Bill():
def __init__(self, description):
self.description = description
>>> class Tail():
def __init__(self, length):
self.length = length
>>> class Duck():
def __init__(self, bill, tail):
self.bill = bill
self.tail = tail
def about(self):
print('This duck has a', self.bill.description, 'bill and a', self.tail.length, 'tail')
>>> tail = Tail('long')
>>> bill = Bill('wide orange')
>>> duck = Duck(bill, tail)
>>> duck.about()
This duck has a wide orange bill and a long tail