В прошлом я использовал профилировщик, который поставляется с Visual Studio Team System .
Да, переопределить метод __ iadd __
. Пример:
def __iadd__(self, other):
self.number += other.number
return self
В дополнение к перегрузке __ 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
иметь?
http://docs.python.org/reference/datamodel.html#emulating-numeric-types
Например, чтобы выполнить инструкцию x + = y, где x - экземпляр класс, у которого есть метод __iadd __ (), x .__ iadd __ (y) вызывается.