我尝试在我的类上使用弱引用,我使用插槽来节省一些内存,但是我无法创建派生类。
class A(object):
__slots__ = ['__weakref__']
class B(A):
__slots__ = A.__slots__ + ['foo']
#TypeError: Error when calling the metaclass bases
# __weakref__ slot disallowed: either we already got one, or __itemsize__ != 0
诀窍在哪里?我没有找到任何解决方案。我正在使用python 2.7.3。
答案 0 :(得分:4)
在派生类中,您应该不放置在基类中定义的插槽。
实际上错误说:
TypeError
:调用元类库时出错 不允许__weakref__
个广告位:我们已经有一个,或__itemsize__ != 0
只需使用:
class B(A):
__slots__ = ['foo']
__slots__
的文档中解释了这一点:
__slots__
声明的操作仅限于其所在的类 被定义为。因此,子类将具有__dict__
,除非它们 还定义__slots__
(,其中只包含任何附加的名称 槽)。