向父 class 中的函数添加条件更好,还是为每个子 class 定义单独的函数更好?

Is it better to add conditionals to a function in a parent class, or to define separate functions for each subclass?

我正在开发一个简单的游戏程序,玩家可以在其中控制两个不同的令牌 - 我们称它们为 SoldierScout - 表示为 类。这些 类 都继承自 Actor,这总结了它们的相似之处。

SoldierScout都可以攻击,而且攻击目标的方式相同,所以Actor有一个功能attack(target)。但是,SoldierScout抵御攻击的方式不同,所以defend()函数不能一直做同样的事情。 (还有几个类似的功能和情况,但这提供了一个很好的例子。)

问题是:我应该如何以及在哪里实施 defend()

选项 A:在 Actor 中实施 defend(),根据 Actor 是否为 [=] 添加条件来更改行为13=] 或 Scout.

class Actor:
    def defend(self):
        if self.actor_type == "Soldier":
            # Defend like a Soldier
        elif self.actor_type == "Scout":
            # Defend like a Scout
        else:
            raise TypeError("Invalid actor type: " + self.actor_type)

选项 B:在 Soldier 中实施 defend() 的一个实例,使用 Soldier 的防御行为,以及另一个实例defend()Scout 中,使用 Scout.

的防御行为
class Actor:
    # Stuff both Soldiers and Scouts can do the same way

class Soldier(Actor):
    def defend():
        # Defend like a Soldier

class Scout(Actor):
    def defend():
        # Defend like a Scout

也许还有选项C?坦率地说,我不太确定我所说的 "better" 是什么意思 - 我主要想知道最佳实践指南是否支持或谴责一个选项或另一个选项。

肯定是后者。前一种方法要求父 class 了解其所有子 class,这与能够轻松扩展代码的观点背道而驰。