Проблема с классом 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__ и использую * вместо /, он делает то, что должен.

Как исправить исключение, которое я получаю?


person user3295426    schedule 11.02.2014    source источник
comment
y — это объект типа Test, что вы ожидаете от деления объекта на кортеж?   -  person Nir Alfasi    schedule 11.02.2014
comment
@alfasin: независимо от того, что определяет метод.   -  person Ignacio Vazquez-Abrams    schedule 11.02.2014
comment
да, я это понимаю, но разве он не должен следовать моему методу div, где я даю ему числа из init? Это работает, когда я использую mul.   -  person user3295426    schedule 11.02.2014


Ответы (2)


Python 3.x использует __truediv__ и __floordiv__. __div__ только для 2.x.

person Ignacio Vazquez-Abrams    schedule 11.02.2014

была такая же проблема на днях.

посмотрите, активен ли __future__.division в вашей среде. если это так, вам также необходимо определить __truediv__.

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

person cso    schedule 10.03.2014