正如标题所述,我想了解如何在没有显式超类名的情况下访问超类的类变量。或者是否可能。
我不是在谈论访问实例变量,而是类变量。
例如,如果我想在以下示例中覆盖类变量,则必须显式使用Parent.class_variable。
class Parent():
class_variable = 'this_is_class_variable'
class Child(Parent):
class_variable = Parent.class_variable + ' in child class'
提前谢谢。
答案 0 :(得分:1)
你不能轻易做你想做的事,因为Child
在你完成定义之前不是一个类。既然它不是一个班级,它没有任何父母。
你可以用某种元编程来做到这一点;破解可能很有趣。我采用的方法是编写一个代表父类属性的代理对象。它需要累积要在其上执行的操作(例如,使用+
连接,如示例所示),而不是立即执行它们。然后,元类或装饰器遍历最终类,查找属于该类实例的属性,并强制在父类的上下文中进行评估(可以从类的__mro__
属性中确定)。
这是很多工作,所以我将留下一个实际的实现作为读者的练习。 ; - )