如何在没有显式 super class 名称的情况下访问 super class 的 class 变量

How to access class variable of super class without explicit super class name

如标题所述,我想了解如何在没有显式 super class 名称的情况下访问 super class 的 class 变量。或者这是否可能。

我不是在谈论访问实例变量而是class变量

例如,如果我想在下面的例子中覆盖一个 class 变量,我必须明确地使用 Parent.class_variable.

class Parent():
    class_variable = 'this_is_class_variable'

class Child(Parent):
    class_variable = Parent.class_variable + ' in child class'

提前致谢。

您不能轻易地做您想做的事,因为 Child 不是 class 直到您完成定义。由于它还不是 class,因此它没有任何 parent。

您可以通过某种元编程来实现;破解可能很有趣。我采用的方法是编写一个代表 parent class 属性的代理 object。它需要累积要对其执行的操作(例如在您的示例中使用 + 进行串联)而不是立即执行它们。元 class 或装饰器然后通过最终确定的 class 寻找作为此 class 实例的属性,并强制在 parent [=19= 的上下文中对其进行评估](可以根据 class 的 __mro__ 属性确定)。

这项工作量很大,所以我将把一个实际的实现留作 reader 的练习。 ;-)