你不行
Python中的类定义工作如下。
>解释器看到一个类语句后跟一个代码块。
>它创建一个新的命名空间,并在命名空间中执行该代码。
>它使用生成的命名空间,类名,基类和元类(如果适用)调用类型内置函数。
>它将结果分配给类的名称。
在类定义中运行代码时,您不知道基类是什么,因此您无法获取属性。
你可以做的是在定义它之后立即修改类。
编辑:这是一个可以用来更新属性的小类装饰器。这个想法是你给它一个名字和一个功能。它查看你的类的所有基类,并使用该名称获取属性。然后它使用继承自基类的值列表和您在子类中定义的值来调用该函数。此呼叫的结果被绑定到该名称。
代码可能更有意义:
>>> 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)
这个想法是您将Bar定义为(2,)。然后,装饰器将通过Bar的子类来查找所有的xs,并与它们一起调用update_x。所以会打电话
update_x([(1,)], (2,))
它通过连接它们组合它们,然后再次绑定到x。那有意义吗?