web-dev-qa-db-ja.com

Pythonクラス__div__の問題

タプルは分数を表します。レシピを掛けて分数を割ろうとしています

class Test():
    def __init__(self):
        self._x=(1,2)
    def __div__(self,div_fraction):
        return (self._x[0]*div_fraction[1],self._x[1]*div_fraction[0])

y=Test()
z=y/(1,3)
print(z)

私に与える:

Traceback (most recent call last):
  File "E:/test.py", line 8, in <module>
   z=y/(1,3)
TypeError: unsupported operand type(s) for /: 'Test' and 'Tuple'

しかし、__div____mul__に変更し、*の代わりに/を使用すると、本来の動作を実行します。

発生した例外を修正するにはどうすればよいですか?

21
user3295426

Python3.xは__truediv____floordiv__を使用します。 __div__は2.xのみです。

先日同じ問題がありました。

ご使用の環境で__future __。divisionがアクティブかどうかを確認してください。その場合は、__ truediv__も定義する必要があります。

http://docs.python.org/2/library/operator.html#mapping-operators-to-functions

2
cso