若有兩類別都做相同事,將相似處拉到超類別是個好主意。
我們不用在設計初期就依據真實世界的架構來定義繼承關係,在程式演變的過程中逐漸實作也很不錯。

Extract Superclass
提取類別(委託)也是種做法,而提取超類別(繼承)比較簡單。
我們可以先執行後者,日後再用替換子類別為委託類別來解決繼承長期會衍生的混亂。
# Before
class Employee:
def __init__(self, name):
self.name = name
def report_hours(self):
print("Reporting hours")
class Manager:
def __init__(self, name):
self.name = name
def create_report(self):
print("Creating report")
# After
class StaffMember:
def __init__(self, name):
self.name = name
def report_hours(self):
print("Reporting hours")
class Employee(StaffMember):
pass
class Manager(StaffMember):
def create_report(self):
print("Creating report")