子类复合体

我一直在试图为综合体构成综合体,但我无法获得
右手算术运算符.
如下所示,如果我的子类" xcomplex"的对象添加了
" comlex"对象的权利,返回的类型为"复杂",而不是
'xcomplex'.
我尝试了子分类浮点,它可以正常工作(甚至不需要
在这种情况下定义__coerce___________
这是一个错误,还是我错过了什么?
这是一个例子:
XComplex类(复杂):
def __new __(cls,*args,** kwargs):
返回复杂.__新__(Cls,*args,** kwargs)
def __coerce __(自我,其他):
t =复杂的.__ coerce __(自我,其他)
尝试:
返回(self,xcomplex(t [1]))
除了typeError:
返回t
def __add __(self,x):
返回Xcomplex(复杂.__添加__(self,x))
def __radd __(self,x):
返回Xcomplex(复杂.__ radd __(self,x))
xz = xcomplex(1+2J)
xy = float(10.0)
Z =复杂(10+1J)
打印类型(XZ + Z)#OK:获取Xcomplex
打印类型(xz + xy)#确定:获取xcomplex
打印类型(XZ + 10)#确定:获取Xcomplex
打印类型(xy + xz)#确定:获取Xcomplex
打印类型(10 + XZ)#确定:获取XComplex
打印类型(z + xz)#失败:获取复杂

# 回答1


8月29日,12:17*am,bidi 我认为问题是Python首先尝试使用__ADD__方法
最左派的对象,仅尝试使用__radd__
如果故障失败,则正确的对象.因为您已经分类了
复杂类,复数的__ADD__方法将起作用
很好,返回一个复杂的结果.
如果您想防止工作,您可能只想只是
从"对象"而不是"复杂"继承,然后重新成真
您关心的方法(可能是一个非常简单的包装器
内部复数号).
问候,
pat
# 回答2


比迪写道:
一个最小的例子是
.... def __radd __(自我,其他):打印" radd"
...
1J
相对
.... def __radd __(自我,其他):打印" radd"
...
radd
我认为复杂的子类应该像INT子类一样行为.
要获得权威答案,您应该提交错误报告.
彼得
# 回答3


8月29日,上午4:24,彼得·奥特(Peter Otten)<__ pete ...@web.dewrote:
... def __radd __(自我,其他):打印" radd"
... >> 1J +复杂()
1J
相对
... def __radd __(自我,其他):打印" radd"
... >> 1 + int()
radd
我认为复杂的子类应该像INT子类一样行为.
要获得权威答案,您应该提交错误报告.

嗯,好点.当我太累了,我不应该看新闻组
查看整个问题.
根据http://docs.python.org/ref/ref/numeric-types.html的文档:
"注意:如果右操作数的类型是左操作数的子类
类型和该子类提供了反映的方法
操作,此方法将在左操作数的非 -
反射方法.这种行为允许子类覆盖他们的
祖先的行动."
我认为这很清楚,OP发现了一个错误
复杂的作品. (在阅读此注释之前,我会有一个 Ssum
int()处理被打破,但看起来像是可支持的设计
决定.可能谁实施的人甚至都没有考虑
复杂数字,但出于一致性,我认为他们应该是
使工作相同.)
问候,
pat

# 回答4


8月30日,6:18*上午,帕特里克·莫普(Patrick Maupin) 嗯,好点. *当我太累了,我不应该看新闻组
查看整个问题.
根据文档athttp://docs.python.org/ref/numeric-types..html:
"注意:如果右操作数的类型是左操作数的子类
类型和该子类提供了反映的方法
操作,此方法将在左操作数的非 -
反射方法.这种行为允许子类覆盖他们的
祖先的行动."
我认为这很清楚,OP发现了一个错误
复杂的作品. *(在阅读此注释之前,我会假设
int()处理被打破,但看起来像是可支持的设计
决定. *可能是谁实施的人甚至都没有考虑
复杂数字,但出于一致性,我认为他们应该是
使工作相同.)
问候,

感谢您的评论.我已将其作为一个问题.
问候
布莱尔

标签: python

添加新评论