【问题标题】:TypeError: unsupported operand type(s) for /:TypeError:不支持的操作数类型/:
【发布时间】:2016-11-23 17:19:00
【问题描述】:

我有此代码的“TypeError: unsupported operand type(s) for /:”

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'

【问题讨论】:

  • 下次请正确格式化您的代码。
  • + 也适用于"wor" + "ks!" = "works!" 中的字符串。 /open 没有。
  • @Ev.Kounis。出于同样的原因,这失败了。与问题相关,但与解决方案无关。
  • 在python3中,__div__被__truediv__和__floordiv__替换。

标签: python generator


【解决方案1】:

Python3 使用特殊的除法名称:__truediv__ 和 __floordiv__ 分别用于 / 和 // 运算符。

在 Python3 中,/ 是真正的除法,因为 5/2 将返回浮点数 2.5。类似地,5//2 是 floor 或 integer 除法,因为它总是返回一个 int,在这种情况下为 2。

在 Python2 中,/ 运算符的工作方式与 Python3 中的 // 运算符的工作方式相同。由于操作员在版本之间更改的方式,__div__ 名称已被删除以避免歧义。

参考:http://www.diveintopython3.net/special-method-names.html#acts-like-number

【讨论】:

【解决方案2】:

在python3中你可以使用truediv:

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

【讨论】:

  • 请解释一下。
猜你喜欢
  • 2020-02-29
  • 2011-03-08
  • 2016-11-28
  • 1970-01-01
  • 2018-04-27
  • 2012-12-26
  • 1970-01-01
  • 2021-05-23
相关资源
最近更新 更多