是否更好的将条件添加到父类中的函数,或者为每个子类定义单独的函数?

时间:2017-11-29 17:09:13

标签: python class oop inheritance subclass

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

SoldierScout都可以攻击并以相同方式攻击目标,因此Actor具有函数attack(target)。但是,SoldierScout以不同方式防御攻击,因此defend()函数无法始终执行相同的操作。 (还有更多这样的功能和情况,但这提供了一个很好的例子。)

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

选项A :在defend()中实施Actor,添加条件以更改行为,具体取决于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 :使用defend()的防御行为和Soldier的另一个实例,在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?坦率地说,我不太确定“更好”是什么意思 - 我主要想知道一个选项或另一个选项是否受到最佳实践指南的支持或批评。

1 个答案:

答案 0 :(得分:4)

绝对是后者。前一种方法要求父类知道它的所有子类,这种方式与能够轻松扩展代码的方式相悖。