#python-2.7
#python-2.7
Вопрос:
Я добавил __divmod__
метод в пользовательский класс. Однако, когда я вызываю функцию divmod для экземпляра этого класса, None
вместе с кортежем (div, mod) возвращается дополнительный.
Вот минимальный пример:
class MyClass:
def __init__(self, val):
self.val = val
def __divmod__(self, other):
return np.divmod(self.val, other)
m = MyClass(7)
Вызов divmod(m, 5)
дает:
((1, 2), None)
в то время как я ожидал, что результат будет таким же, как m.__divmod__(5)
при прямом вызове:
(1, 2)
Я не понимаю None
, откуда берется лишнее. Может быть, у магического метода __divmod__
есть другая цель? Может кто-нибудь привести пример?
Комментарии:
1. мой тест на Python 2 и 3,
divmod(m, 5)
оба вывода:(1, 2)
?2. Какую версию Python-2 вы используете? Я тестировал 2.7.13 и 2.7.15 на двух разных компьютерах (оба дистрибутива Anaconda).
3. Я использовал ядро python2 jupyter: 2.7.13, моя обычная среда — python3, это только у меня
4. Спасибо за тестирование. Похоже, что в моей среде python есть конкретная проблема.
5. Хорошо, я нашел решение. Проблема возникла в сеансе IPython, где функция divmod была фактически перезаписана divmod от numpy. Использование функции python divmod дает ожидаемый результат. К сожалению, я не могу ответить на свой собственный вопрос и пометить его как решенный.
Ответ №1:
ученик класса: def init(self,num): self.num=num
def __divmod__(self,other):
divmod_tup=divmod(self.num,other.num)
print("Quotient=",divmod_tup[0])
print("Remainder=",divmod_tup[1])
s1=Студент(66)
s2= Студент (20)
divmod(s1, s2)