对于一个有趣(且有效但无关)的原因,我想做以下事情:
class Head(type, tuple):
pass
但这会导致
TypeError: multiple bases have instance lay-out conflict
(在python3.3和python2.7上)
有什么方法吗?
对于好奇的我想创建一些行为类似于Mathematica
表达式(Derivative[1][g][x]
为g'(x)
)的东西。我知道还有其他方法,但出于教育目的,我坚持这个。
答案 0 :(得分:3)
我似乎无法找到适当的链接,但重点是Python不支持多种内置类型的多重继承。您不能创建一个继承“type”和“tuple”,或“int”和“str”或大多数其他组合的类。与实例的内部布局有关的主要内部原因是:“int”对象的内存布局包含整数值的存储;但这与“str”对象的布局是不相容的,该对象包含字符的存储。创建一个可以从两者继承的类的实例是不可能的,因为我们不知道它应该具有哪种内存布局。
将此与仅直接或间接从object
继承的类实例的内存布局进行比较。这样的实例只需要存储__dict__
,这是一个包含属性的字典。对于任何多重继承图,这都没有问题。
将这两个案例(在Python 2.2中)合并到以下“尽力而为”的appraoch中:只有在最多有一个内置基类型时,才能实现继承。在这种情况下,内存布局可以从此内置类型的预期布局开始,然后包含__dict__
以存储其他基类所需的任何属性。