你不能

类定义在Python中的工作方式如下。解释器看到一个class语句,后面跟着一段代码。

它创建一个新的名称空间并在名称空间中执行该代码。

它使用生成的命名空间、类名、基类和元类(如果适用)调用type内置。

它将结果赋给类的名称。

在类定义中运行代码时,您不知道基类是什么,因此无法获取它们的属性。

您可以在定义类之后立即修改它。

编辑:这里有一个小的类装饰器,可以用来更新属性。这个想法是你给它一个名字和一个函数。它会查看类的所有基类,并使用该名称获取它们的属性。然后它使用从基类继承的值列表和在子类中定义的值调用函数。此调用的结果已绑定到该名称。

代码可能更有意义:>>> def inherit_attribute(name, f):

... def decorator(cls):
... old_value = getattr(cls, name)
... new_value = f([getattr(base, name) for base in cls.__bases__], old_value)
... setattr(cls, name, new_value)
... return cls
... return decorator
...
>>> def update_x(base_values, my_value):
... return sum(base_values + [my_value], tuple())
...
>>> class Foo: x = (1,)
...
>>> @inherit_attribute('x', update_x)
... class Bar(Foo): x = (2,)
...
>>> Bar.x
(1, 2)

其思想是将x定义为(2,)中的Bar。然后,decorator将遍历Bar的子类,找到它们的所有x,并与它们一起调用update_x。所以它会叫update_x([(1,)], (2,))

它通过连接它们来组合它们,然后再次将其绑定回x。这有道理吗?