出于一些有趣但无关紧要的原因,我想要做以下操作:
class Head(type, tuple):
pass
但这将导致
TypeError: multiple bases have instance lay-out conflict
在Python3.3和Python2.7上有什么解决方法吗?
如果你好奇,我想创建一个类似于Mathematica表达式的东西(Derivative[1][g][x]
为g'(x)
)。我知道还有其他方法,但出于教育目的,我坚持使用这种方法。
Derivative[1][g][x]
的好方法? - BrenBarntype
是完全没有意义的;它并没有给你任何tuple
没有提供的东西。 - Martijn Pieterstype
),其中包含元组的__eq__
(因为我将所有参数保存在元组中)。我可以使用元组作为类的属性,但这不如类本身是元组的子类那样好。所以我不明白为什么子类化type
是无意义的。除了使用hack之外,还有什么其他方法可以创建元类吗? - Krastanov__getitem__
而是__call__
。但这还不够,因为我希望遍历树时具有一致性。正如我所说,我知道有其他方法可以做到这一点,但出于美学和教育目的,我更喜欢这种方式。此外,这是实现表达式树的语义正确的方式,其中运算符本身可以是完整的其他树。 - Krastanov(Derivative(1)(g)(x))[2] == x
,但我认为这很难理解。如果您需要获取第n个参数,则可以创建一个命名方法来实现。如果您真的喜欢数组访问语法,可以使用__getitem__
将其放回。因此,我认为您应该从type而不是tuple继承。 - morningstar