在槽中继承具有弱参数的类

时间:2014-06-25 11:48:53

标签: python inheritance weak-references

我尝试在我的类上使用弱引用,我使用插槽来节省一些内存,但是我无法创建派生类。

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。

1 个答案:

答案 0 :(得分:4)

在派生类中,您应该放置在基类中定义的插槽。

实际上错误说:

  

TypeError:调用元类库时出错       不允许__weakref__个广告位:我们已经有一个,或__itemsize__ != 0

只需使用:

class B(A):
    __slots__ = ['foo']

__slots__的文档中解释了这一点:

  

__slots__声明的操作仅限于其所在的类   被定义为。因此,子类将具有__dict__,除非它们   还定义__slots__,其中只包含任何附加的名称   槽)。