Я плохо знаком с Python так извинения заранее, если это - глупый вопрос.
Для присвоения я должен перегрузить увеличенные арифметические присвоения (+ =, - =, / =, * =, ** =, %=) для класса myInt. Я проверил документацию Python, и это - то, что я придумал:
def __iadd__(self, other):
if isinstance(other, myInt):
self.a += other.a
elif type(other) == int:
self.a += other
else:
raise Exception("invalid argument")
self.a и other.a относятся к интервалу, сохраненному в каждом экземпляре класса. Я пытался проверить это следующим образом, но каждый раз я не получаю 'Ни один' вместо математического ожидания 5:
c = myInt(2)
b = myInt(3)
c += b
print c
Кто-либо может сказать мне, почему это происходит?Заранее спасибо.
>>> import string
>>> def int2base(integer, base):
if not integer: return '0'
sign = 1 if integer > 0 else -1
alphanum = string.digits + string.ascii_lowercase
nums = alphanum[:base]
res = ''
integer *= sign
while integer:
integer, mod = divmod(integer, base)
res += nums[mod]
return ('' if sign == 1 else '-') + res[::-1]
>>> int2base(-15645, 23)
'-16d5'
>>> int2base(213, 21)
'a3'
-121--635516- Вы можете продолжать использовать < div >
, но просто добавить дисплеев: inline
в CSS, что сделает его отображаемым как < span >
.
Редактирование: фиксированное место в конце, где я сказал «div», но означало «span».
-121--1740797- Необходимо добавить в метод функцию возврата
. Объяснение:
Семантика a + = b
, когда тип (a)
имеет специальный метод __ iadd __
, определяется как:
a = a.__iadd__(b)
, так что если __ iadd __
возвращает нечто иное, чем self
, то это будет связано с именем a
после При отсутствии инструкции return
разнесенный метод эквивалентен методу с return None
.
Расширенные операторы в Python должны возвращать окончательное значение, которое будет присвоено имени, которое они вызывают, обычно (и в вашем случае) self
. Как и все методы Python, отсутствие оператора return подразумевает возврат None
.
Кроме того,
Исключение
, которое невозможно поймать разумно. В коде для этого должно быть указано , кроме Exception
, которое перехватит все исключения. В этом случае вам нужна ValueError
или TypeError
. type (foo) == SomeType
. В этом (и практически во всех) случаях isinstance
работает лучше или, по крайней мере, так же. myInt
, вы должны называть его заглавными буквами, чтобы люди могли распознать его как имя класса. Да, вам нужно "вернуть себя", это будет выглядеть так:
def __iadd__(self, other):
if isinstance(other, myInt):
self.a += other.a
return self
elif type(other) == int:
self.a += other
return self
else:
raise Exception("invalid argument")