首页 > 解决方案 > 是否可以在 python 中进行多级条件继承?

问题描述

场景 - 假设我有 4 个班级 - A、B、C1、C2

main 创建了一个类 A 的实例。类 A 是最年轻的类,而类 C1 和 C2 处于同一级别但最年长的类。年轻是指孩子,最年长是指祖父母。

所有类都通过多级继承相互关联,因此流程是 A --> B --> C1 或 A --> B --> C2。A 又是孩子,它继承了 B 的一切,依此类推。

当 main 调用类 A 的实例时,传递了一组参数。假设其中一个参数是 flag。

建筑学

main():
   A(p1, p2, p3, flag)

class A(B):
   def __init__(self, p1, p2, p3, flag):
       B.__init__(self, p2, p3, flag) 

class B(C1, C2):
   def __init__(self, p2, p3, flag):
       if flag:
          C1.__init__(self, p2)
       else:
          C2.__init__(self, p3)
class C1():
    def __init__(self):
         self.fn_f1()

    def fn_f1():
       # Do something
class C2():
    def __init__(self):
        self.fn_f1()

    def fn_f1():
       # Same function name, returns same type of variable but operations are different.

我的问题在最后一部分。类 C1 和 C2 也具有相同的函数名称和变量,但执行不同的任务并在 B 和 A 中使用的变量中产生相同的结构。我的代码通过这种方式失败,错误消息表明当调用 C2 时,正在调用 C1 的 fn_f1。我的推断是,这是由于多重继承,即 C1 在首次继承时获得更高的偏好。我不确定我的推论是否不正确,如果是,请道歉。

我想要的是

class B(C1 if flag else C2):
   def __init__(self, p2, p3, flag):
       if flag:
          C1.__init__(self, p2)
       else:
          C2.__init__(self, p3)

但是 B 通过参数不知道什么是标志,所以这也不起作用。

谁能建议可以做什么?请为您的解决方案提供继承的中心目标,而不是实例创建。我知道下面可能会起作用,但我想继承以避免一些我觉得在这里说明无关的其他并发症。

可能工作

class B():
     def __init__(self, p2, p3, flag):
         if flag:
            self.C1_obj = C1(...)
         else:
            self.C2_obj = C2(...)
      # Use the objects

最后一个应该可以轻松工作,但正如我所提到的,由于 A、B 等方面的其他并发症,我真的很想继承。

非常感激。谢谢。

标签: pythonoopinheritanceconditional-statements

解决方案


推荐阅读