軟體中常會遇到需要描述相似的東西:初期可用型別區分,但更好的做法是使用子類別。

Replace Type Code with Subclasses

這樣可善用多型,也可讓某些欄位或函式限縮在特定子類別中。

要替換的對象是整體類別還是當中型別?
我們可先將型別換成物件類別,再對其用此手法。

# Before
class Employee:
    def __init__(self, name, type_code):
        self.name = name
        self.type_code = type_code

    def get_role(self):
        if self.type_code == 0:
            return "Manager"
        elif self.type_code == 1:
            return "Engineer"

# After
class Employee:
    def __init__(self, name):
        self.name = name

class Manager(Employee):
    def get_role(self):
        return "Manager"

class Engineer(Employee):
    def get_role(self):
        return "Engineer"