有没有办法从班级内部获得第一个基础班?

时间:2019-06-12 00:23:39

标签: python python-3.x

一个例子来说明:

class Base:
    value = 'foo'

class Derived(Base):
    value = super().value + 'bar'
不能从没有参数的类主体中调用

super。我正在寻找一种可以放置在类主体中的通用语法,而不管该类的名称或其基数如何,以从其(第一个)基类获取类属性。是否存在?

2 个答案:

答案 0 :(得分:0)

不,当执行类主体时,该类本身不存在,因此您无法引用任何基类。

我唯一想到的解决方法是显式命名基类(例如,您示例中的Base.value)。由于您只是在前一行(在class语句中将其命名),所以即使您确实需要重复自己,这也不是一个沉重的负担。

还不太清楚为什么,您希望能够从派生类的类主体中访问基类。如果有充分的理由,您可能可以编写一些专门针对它的元类代码来启用它(例如,您可以为value分配一个魔术值,元类会知道这意味着您想查找基数类的值)。

答案 1 :(得分:0)

您可以使用delta(ping_timestamp[5m]) < 20metaclass内设置类变量value的值:

也许是这样的:

Derived

输出:

class Base(type):
    value = 'foo'
    def __init__(self, name, bases, namespace):
        self.value = Base.value + self.value

class Derived(metaclass=Base):
    value = 'bar'

Derived.value, Base.value