如何在没有显式超类名

时间:2017-12-14 02:07:47

标签: python inheritance class-variables

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

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

例如,如果我想在以下示例中覆盖类变量,则必须显式使用Parent.class_variable。

class Parent():
    class_variable = 'this_is_class_variable'

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

提前谢谢。

1 个答案:

答案 0 :(得分:1)

你不能轻易做你想做的事,因为Child在你完成定义之前不是一个类。既然它不是一个班级,它没有任何父母。

你可以用某种元编程来做到这一点;破解可能很有趣。我采用的方法是编写一个代表父类属性的代理对象。它需要累积要在其上执行的操作(例如,使用+连接,如示例所示),而不是立即执行它们。然后,元类或装饰器遍历最终类,查找属于该类实例的属性,并强制在父类的上下文中进行评估(可以从类的__mro__属性中确定)。

这是很多工作,所以我将留下一个实际的实现作为读者的练习。 ; - )