TypeError:/:' instance'不支持的操作数类型和'实例'和__truediv __ / __ div__差异?

时间:2014-04-08 21:37:50

标签: python python-2.7

我正在使用特殊方法 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。谢谢!

2 个答案:

答案 0 :(得分:7)

如果您使用的是Python 3或使用过from __future__ import division,则需要将__div__替换为__truediv__

答案 1 :(得分:4)

如果您已完成from __future__ import division,则/运算符会调用__truediv__而不是__div__。除__truediv__外,只需重载__div__,它就可以正常工作。