标签:python python-3-x metaclass symbolic-math
参见英文答案 > Why can’t I inherit from dict AND Exception in Python? 6个
为了一个有趣(有效但无关)的原因,我想做以下事情:
class Head(type, tuple):
pass
但这导致了
TypeError: multiple bases have instance lay-out conflict
(在python3.3和python2.7上)
有什么方法吗?
对于好奇我想创造一些像Mathematica表达式的东西(Derivative [1] [g] [x]是g'(x)).我知道还有其他方法,但出于教育目的,我坚持这一点.
解决方法:
我似乎无法找到它的适当链接,但重点是Python不支持几种内置类型的多重继承.您不能创建一个继承“type”和“tuple”,或“int”和“str”或大多数其他组合的类.与实例的内部布局有关的主要内部原因是:“int”对象的内存布局包含整数值的存储;但这与“str”对象的布局是不相容的,该对象包含字符的存储.创建一个可以从两者继承的类的实例是不可能的,因为我们不知道它应该具有哪种内存布局.
将此与仅直接或间接从对象继承的类实例的内存布局进行比较.这样的实例只需要存储__dict__,这是一个包含属性的字典.对于任何多重继承图,这都没有问题.
这两个案例已经(在Python 2.2中)合并到以下“尽力而为”的appraoch中:只有最多只有一个内置基类型才能实现继承.在这种情况下,内存布局可以从此内置类型所需的布局开始,然后包含__dict__以存储其他基类所需的任何属性.
标签:python,python-3-x,metaclass,symbolic-math 来源: https://codeday.me/bug/20190629/1326973.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。