python - 是否可以在 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 等方面的其他并发症,我真的很想继承。
非常感激。谢谢。
解决方案
推荐阅读
- python - 为什么 record = cur.fetchone()[0] 突然变成了 Nonetype
- javascript - 如何使用参数设置 Express 路由
- amazon-web-services - 我可以使用 lambda 将数据从 s3 导出到 dynamoDB 吗?
- python - 使用条件参数创建组合并删除值
- google-cloud-firestore - GQL查询选择名称默认的种类
- list - 如果“milk”不在列表中,为什么我的代码不会将“milk”附加到列表的末尾?
- python - Matplotlib 条形图 x 轴下方的负值
- angular - 功能在其他功能之前运行,尽管位于稍后
- c# - 使用 lambda 表达式表示扩展方法
- c++ - “typename iterator_traits”是什么意思
::difference_type”是什么意思?