<p>简单地说,你就是做不到。在</p>
<p>如<a href="https://docs.python.org/3/reference/datamodel.html#notes-on-using-slots" rel="nofollow noreferrer">Documentation</a>所述</p>
<blockquote>
<p>Multiple inheritance with multiple slotted parent classes can be used, but only one parent is allowed to have attributes created by slots (the other bases must have empty slot layouts) - violations raise TypeError.</p>
</blockquote>
<p><code>__slots__</code>背后的思想是为实例的内存布局中的每个属性保留特定的<em>插槽</em>。^这两个<cd4{layout}和<cd6}的属性是相同的。只是不兼容。在</p>
<hr/>
<p><strong>感谢注释中所述的JCode,以下方法已修改为正确。</strong></p>
<p>但是总有办法,如果<code>__slots__</code>是必需的,而有多个继承类,我个人更喜欢使用包含所有必需插槽的公共基。在</p>
<pre><code>import pympler.asizeof
class base():
__slots__ = ['a','b']
class A(base):
__slots__ = []
class B(base):
__slots__ = []
class C(A,B):
__slots__ = []
class D():
pass
#Update
bb = base()
bb.a = 100
bb.b = 100
print(pympler.asizeof.asizeof(bb))
a = A()
a.a = 100
a.b = 100
print(pympler.asizeof.asizeof(a))
c = C()
c.a = 100
c.b = 100
print(pympler.asizeof.asizeof(c))
d = D()
d.a = 100
d.b = 100
print(pympler.asizeof.asizeof(d))
</code></pre>
<p><strong>更新</strong>
这4个值将是88、88、88、312。尽管<code>__slots__</code>保留。在</p>