类型错误:不支持的操作数类型(个),/:
我有 “类型错误:不支持的操作数类型(个),/:” 此代码类型错误:不支持的操作数类型(个),/:
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'
Python3分别对/
和//
运算符使用特殊的分割名称:__truediv__
和__floordiv__
。
在Python3中,/
是一个真分区,5/2
将返回浮点数2.5
。同样5//2
是楼师或整数除法,因为它总是会返回一个int,在这种情况下,2
。
在Python2中,/
运算符与//
运算符在Python3中的工作方式相同。由于操作员在不同版本之间更改的方式,因此名称被删除以避免模糊不清。
参考:http://www.diveintopython3.net/special-method-names.html#acts-like-number
为了完整性,'__floordiv__'也是Python 2中'//'的特殊方法。'__truediv__'可以在Python 2中用'from __future__ import division'使用。请参阅https://docs.python.org/2/library/operator.html – cdarke
在python3您可以使用truediv:
class Foo(object):
def __add__(self, other):
return print("add")
def __truediv__(self, other):
return print("div")
请进行一些解释。 –
请妥善下一次格式化你的代码。 – Carcigenicate
'+'也适用于字符串,如“wor”+“ks!” =“工作!”'。 '/'openand没有。 –
@ Ev.Kounis。出于同样的原因,这失败了。与问题非常相关,但不是解决方案。 –