Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 23, 2015 22:01:48

PyNovice
Зарегистрирован: 2014-09-18
Сообщения: 17
Репутация: +  2  -
Профиль   Отправить e-mail  

Операторы __div__, __floordiv__

Python 3.4.2
Застрял на классах из одной книги

# Нахождение наибольшего общего делителя
def gcd(m, n):
    while m % n != 0:
        oldm = m
        oldn = n
        m = oldn
        n = oldm % oldn
    return n
class Fraction:
    def __init__(self, top, bottom):
        self.num = top
        self.den = bottom
    def __str__(self):
        return str(self.num) + "/" + str(self.den)
    def show(self):
        print(self.num, "/", self.den)
    def __add__(self, otherfraction):
        newnum = self.num * otherfraction.den + self.den * otherfraction.num
        newden = self.den * otherfraction.den
        common = gcd(newnum, newden)
        return Fraction(newnum // common, newden // common)
    def __eq__(self, other):
        firstnum = self.num * other.den
        secondnum = other.num * self.den
        return firstnum == secondnum
    def __mul__(self, otherfraction):
        newnum = self.num * otherfraction.num
        newden = self.den * otherfraction.den
        common = gcd(newnum, newden)
        return Fraction(newnum // common, newden // common)
    def __div__(self, otherfraction):
        newnum = self.num * otherfraction.den
        newden = self.den * otherfraction.num
        common = gcd(newnum, newden)
        return Fraction(newnum // common, newden // common)

Класс для простых операций с дробями. Почему-то не срабатывает оператор __div__ как собственно и __floordiv__. При делении объектов Fraction выдает Exception
TypeError: unsupported operand type(s) for /: 'Fraction' and 'Fraction'
для floordiv // соответственно
Написано вроде верно, а почему-то не работает.

Офлайн

#2 Фев. 24, 2015 00:40:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Операторы __div__, __floordiv__

>>> class A:
...     def __truediv__(self, v):
...         print('div', v)
... 
>>> a = A()
>>> a / A()
div <__main__.A object at 0xb741de0c>
>>>



Офлайн

#3 Фев. 24, 2015 19:53:52

PyNovice
Зарегистрирован: 2014-09-18
Сообщения: 17
Репутация: +  2  -
Профиль   Отправить e-mail  

Операторы __div__, __floordiv__

Спасибо, с __truediv__ работает как надо. Да и с __floordiv__ разобрался, IDLE с толку сбивал.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version