【发布时间】:2014-06-08 00:34:17
【问题描述】:
我在两个类之间有一个循环依赖关系,一个父类和子类在继承关系中。 Child 显然需要 Parent,但在这种情况下,Parent 还需要调用特定的 Child。
因为 Parent 和 Child 存储在两个不同的文件中,所以它们必须相互要求,这会产生循环依赖。我意识到这是一种不好的做法,但不知道如何解决它。
下面是一个与我正在做的类似的小例子。在这种情况下,Animal 是 Parent,Tiger 是一个孩子。
class Animal:
def can_beat_tiger(self):
return not Tiger().can_eat(self)
class Tiger(Animal):
有没有更好的方法来做到这一点?一些选项包括:
- 使用组合。也许有一个较小的 Animal 类,其中包含一个 self.specific_animal 实例。
- 从父项中删除子引用函数并复制到每个子项中。在这种情况下,这意味着将 can_beat_tiger() 函数移动到每个子 Animal。
- 通过相关模块导入来处理它。 (循环依赖)
【问题讨论】:
-
can_beat_tiger()的结果基于什么? -
为什么不能将类存储在同一个文件中?
-
Christian - 在这种情况下 can_beat_tiger() 是一个布尔值,True 或 False。 jwodder - 我在技术上可以,但担心它可能仍然是一种不受欢迎的代码气味。此外,随着代码库的扩展,这将是一个令人沮丧的限制。
-
您对代码异味的看法是对的。这种情况表明您的设计存在缺陷。
标签: python inheritance composition