我有" TypeError:/:"不支持的操作数类型对于此代码
class Foo(object):
def __add__(self, other):
return print("add")
def __div__(self, other):
return print("div")
Foo() + Foo()
add
**但/ **
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'
答案 0 :(得分:13)
Python3分别为__truediv__
和__floordiv__
运算符使用特殊的分部名称:/
和//
。
在Python3中,/
是一个真正的分区,5/2
将返回浮点数2.5
。同样地,5//2
是 floor 除法或整数除法,因为它总是会返回一个int,在本例中为2
。
在Python2中,/
运算符的工作方式与{3}}运算符在Python3中的工作方式相同。由于运算符在不同版本之间的更改方式,因此删除了//
名称以避免歧义。
参考:http://www.diveintopython3.net/special-method-names.html#acts-like-number
答案 1 :(得分:0)
在python3中,您可以使用 truediv :
class Foo(object):
def __add__(self, other):
return print("add")
def __truediv__(self, other):
return print("div")