class Foo(object):
__slots__ = ('a',)
class Bar(Foo):
@property
def a(self):
return super(Bar, self).a
super(Bar, Bar()).a = 4
如果我使用此代码,这不起作用:
>>> super(Bar, Bar()).a = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'super' object has no attribute 'a'
为什么?
根据python 文档,__slots__
实现:
__slots__
通过为每个变量名创建描述符(实现描述符)在类级别实现。因此,类属性不能用于设置由__slots__
;定义的实例变量的默认值。否则,类属性将覆盖描述符分配。
但是描述符可以处理继承(至少如果用纯 python 编写的话)。
有谁知道,为什么这不起作用__slots__
?
编辑:似乎描述符通常不适用于super()
,如果您正在尝试编写(虽然可以阅读)。所以我的问题宁愿是:为什么描述符是只读的,如果用 调用super()
?