擅长:python、mysql、java
<p>尽管Alex对这个问题进行了深入的诊断,但我强烈主张,在这种情况下,您不应该将inherit from <code>dict</code>进行乘法继承(或者一般情况下,对于这种情况),尽管从它派生子类并自动继承所有dict行为似乎很方便,但是dict(以及一般的内置类型)通常都会受到快捷方式的影响内部。例如,“get”方法不会调用已修改的<code>__getitem__</code>,即使它确实获取了项:</p>
<pre><code>>>> class MyDict(dict):
... def __getitem__(self, key):
... print("in __getitem__(%r)" % (key,))
... return super(MyDict, self).__getitem__(key)
...
>>> d = MyDict({'a': 'b', 'c': 'd'})
>>> d['a']
in __getitem__('a')
'b'
>>> d.get('c')
'd'
>>>
</code></pre>
<p>(这样的案例不胜枚举。)</p>
<p>此外,涉及内置类型的多重继承要求所有类型的实例在内存中的布局都是兼容的。碰巧,<code>threading.Thread</code>和<code>threading._Rlock</code>是Python类(这意味着它们有一个非常简单的内存布局,与<code>dict</code>兼容),但是如果将来改变了这一点,或者您想包含其他类型,它就会失败。在</p>
<p>这真是个坏主意。在</p>