2016-11-23 111 views
1

我有 “类型错误:不支持的操作数类型(个),/:” 此代码类型错误:不支持的操作数类型(个),/:

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' 
+2

请妥善下一次格式化你的代码。 – Carcigenicate

+0

'+'也适用于字符串,如“wor”+“ks!” =“工作!”'。 '/'openand没有。 –

+0

@ Ev.Kounis。出于同样的原因,这失败了。与问题非常相关,但不是解决方案。 –

回答

13

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

+1

为了完整性,'__floordiv__'也是Python 2中'//'的特殊方法。'__truediv__'可以在Python 2中用'from __future__ import division'使用。请参阅https://docs.python.org/2/library/operator.html – cdarke

0

在python3您可以使用truediv

class Foo(object): 
    def __add__(self, other): 
     return print("add") 
    def __truediv__(self, other): 
     return print("div") 
+2

请进行一些解释。 –

相关问题