最好将条件添加到父类中的函数,或为每个子类定义单独的功能



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

SoldierScout都可以攻击,并以相同的方式攻击目标,因此Actor具有函数attack(target)。但是,SoldierScout以不同的方式防御攻击,因此defend()功能不能一直执行相同的事情。(此类功能和情况还有几个,但这提供了一个很好的例子。)

这是一个问题:如何以及在哪里,我应该实现defend()

选项A :在Actor中实现defend(),根据ActorSoldier还是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的防御行为,以及Scoutdefend()的另一个实例,使用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?坦率地说,我不太确定"更好"的意思 - 我主要希望知道一种选项是否受到最佳实践指南的支持或谴责。

绝对是后者。前者的方法要求母类知道其所有子类,哪种子类与能够轻松扩展您的代码的目的。

最新更新