4

出于一个有趣(并且有效但不相关)的原因,我想做以下事情:

class Head(type, tuple):
    pass

但这导致

TypeError: multiple bases have instance lay-out conflict

(在 python3.3 和 python2.7 上)

有什么办法吗?

对于好奇的人,我想创建一些表现得像Mathematica表达式 ( Derivative[1][g][x]being g'(x)) 的东西。我知道还有其他方法,但出于教育目的,我坚持使用这种方法。

4

1 回答 1

3

我似乎找不到合适的链接,但关键是 Python 不支持多个内置类型的多重继承。您不能创建继承自“type”和“tuple”、或“int”和“str”或大多数其他组合的类。与实例的内部布局有关的主要内部原因是:“int”对象的内存布局包含整数值的存储;但这与包含字符存储的“str”对象的布局不兼容。不可能创建从两者都继承的类的实例,因为我们不知道它应该具有哪种内存布局。

object将此与仅直接或间接继承自 的类实例的内存布局进行比较。这样的实例只需要存储 a __dict__,它是一个包含属性的字典。对于任何多重继承图,这都没有问题。

这两种情况(在 Python 2.2 中)已组合成以下“尽力而为”的方法:仅当最多有一个内置基类型时,才可能进行继承。在这种情况下,内存布局可以从该内置类型的预期布局开始,然后包含__dict__用于存储其他基类所需的任何属性的布局。

于 2013-06-03T10:52:39.533 回答