我正在使用特殊方法 div 创建一个类。这是我的代码:
class C:
def __init__(self,r,a=0.0):
self.r = r
self.a = a
def __div__(self,other):
SR, SI, OR, OI = self.r, self.a, other.r, other.a
s = float(OR**2 + OI**2)
return C((SR*OR+SI*OI)/s,(SI*OR-SR*OI)/s)
def __str__(self):
return '(%g,%g)' % (self.r,self.a)
这就是我所做的:
>>> from classes import C
>>> u = C(2,-1)
>>> v = C(1)
>>> w = u/v
然后我收到错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'instance' and 'instance'
但是当我使用时:
def __truediv__(self,other):
SR, SI, OR, OI = self.r, self.a, other.r, other.a
s = float(OR**2 + OI**2)
return C((SR*OR+SI*OI)/s,(SI*OR-SR*OI)/s)
我不再收到错误。我的问题是我得到的错误是什么意思?使用 truediv 和 div 之间有什么区别?我使用的Python版本是2.7.3。谢谢!
答案 0 :(得分:7)
如果您使用的是Python 3或使用过from __future__ import division
,则需要将__div__
替换为__truediv__
。
答案 1 :(得分:4)
如果您已完成from __future__ import division
,则/
运算符会调用__truediv__
而不是__div__
。除__truediv__
外,只需重载__div__
,它就可以正常工作。