如何在没有显式 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 的练习。 ;-)
如标题所述,我想了解如何在没有显式 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 的练习。 ;-)