Переопределение “+ =” в Python? (__ iadd __ () метод)

В прошлом я использовал профилировщик, который поставляется с Visual Studio Team System .

61
задан smci 23 July 2011 в 01:56
поделиться

3 ответа

Да, переопределить метод __ iadd __ . Пример:

def __iadd__(self, other):
    self.number += other.number
    return self    
107
ответ дан 24 November 2019 в 17:08
поделиться

В дополнение к перегрузке __ iadd __ (не забудьте вернуть self!), Вы также можете откатиться на __ add __ , поскольку x + = y будет работать как х = х + у. (Это одна из ловушек оператора + =.)

>>> class A(object):
...   def __init__(self, x):
...     self.x = x
...   def __add__(self, other):
...     return A(self.x + other.x)
>>> a = A(42)
>>> b = A(3)
>>> print a.x, b.x
42 3
>>> old_id = id(a)
>>> a += b
>>> print a.x
45
>>> print old_id == id(a)
False

Он даже сбивает с толку экспертов :

class Resource(object):
  class_counter = 0
  def __init__(self):
    self.id = self.class_counter
    self.class_counter += 1

x = Resource()
y = Resource()

Какие значения вы ожидаете x.id , y.id и Resource.class_counter иметь?

12
ответ дан 24 November 2019 в 17:08
поделиться

http://docs.python.org/reference/datamodel.html#emulating-numeric-types

Например, чтобы выполнить инструкцию x + = y, где x - экземпляр класс, у которого есть метод __iadd __ (), x .__ iadd __ (y) вызывается.

5
ответ дан 24 November 2019 в 17:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: