【发布时间】:2021-08-17 09:10:53
【问题描述】:
我有两个结构相似但功能不同的类。我希望第三个类能够根据我的需要从其中任何一个继承。假设我有一个对象模块,并且在模块中定义了类 A、B 和 C。这是我在互联网上找到的语法后进行条件继承的方式:
cond = True
class C(A if cond else B):
def __init__(self):
super.__init__()
其中 A 和 B 是模块对象中的其他类。现在,当我将对象模块中的对象和 C 类导入 jupyter 笔记本并更改 cond:
objects.cond = False
my_class = C()
当我检查父类的名称时,似乎没有任何效果。这意味着在更改条件后,我希望类 C 继承自 B,但它从类 A 继承,就好像 cond 仍然评估为 True。我试过不从模块导入类,只导入对象模块并用my_class = objects.C() 实例化我的类,但仍然不会发出新条件。
现在在我的情况下,只要我需要在模块内手动更改条件并不困难,但我想知道所有这些对 python 语法的说明。我做错了什么还是因为python中模块和类级别之间的某种命令优先级?或者语法可能是错误的?
注意我还没有编写完整的 C 类,其他东西正在 C 类中完成,其中一些会根据继承的父级而改变。该代码用作虚拟但 IMO 足够的示例。
【问题讨论】:
-
您是否尝试过在导入模块中只使用类 A 和 B 并在本地设置 cond 和定义 C?我认为这是您的条件继承所必需的,因为代码是在导入时执行的,即“诸如 class 和 def 之类的关键字不是声明。相反,它们是执行的实时语句”。
-
好的,这是有道理的,我只是想知道在 python 的更深层次上发生了什么。我认为提供一个彻底解释您刚才评论的答案不会有害。
-
@P.basimfar——发布了答案。让我知道这是否有助于澄清。
标签: python oop multiple-inheritance