关于python:TypeError:/不支持的操作数类型:

TypeError: unsupported operand type(s) for /:

对于此代码,我有"typeerror:不支持/:"的操作数类型

1
2
3
4
5
6
7
8
9
class Foo(object):
    def __add__(self, other):
        return print("add")
    def __div__(self, other):
        return print("div")


Foo() + Foo()
add

**但为了/**

1
2
3
4
5
6
7
Foo() / Foo()
Traceback (most recent call last):

  File"<ipython-input-104-8efbe0dde481>", line 1, in <module>
    Foo() / Foo()

TypeError: unsupported operand type(s) for /: 'Foo' and 'Foo'


python3使用特殊的除名:__truediv____floordiv__分别用于///运算符。

在python3中,/是一个真正的除法,因为5/2将返回浮点数2.5。同样,5//2是一个底除法或整数除法,因为它总是返回一个int,在这种情况下,2是一个整数除法。

在python2中,/操作符的工作方式与//操作符在python3中的工作方式相同。由于操作人员在不同版本之间进行了更改,为了避免混淆,删除了__div__名称。

参考:http://www.diveintopython3.net/special method names.html与数字类似


在python3中,您可以使用truediv:

1
2
3
4
5
class Foo(object):
    def __add__(self, other):
        return print("add")
    def __truediv__(self, other):
        return print("div")