У меня большой класс с большим количеством участников, и довольно много ссылок на экземпляры этого класса. К сожалению (по разумным причинам) все эти ссылки неверны.
Вместо повторного создания каждого (и поиска и обновления везде, на которые ссылаются объекты), или добавления дополнительного уровня косвенности каждый раз, когда я обращаюсь к этому классу или индивидуально меняя элементы, я определил метод:
def swap(self, other):
assert(isinstance(other, self.__class__))
self.__dict__, other.__dict__ = other.__dict__, self.__dict__
чтобы я мог:
instance_a.swap(instance_b)
# now all references to instance_a everywhere are as if instance_a is instance_b
Вопрос:
Кажется, что он работает нормально (я не использую __slots__
), но похоже, что может быть причина, по которой я не должен этого делать, есть ли?
Вот мой фактический прецедент:
У меня есть тип, который реализует операторы сравнения (обязательно) дорогостоящим способом. У меня есть различные отсортированные структуры данных, содержащие объекты этого типа.
Когда я что-то делаю с одним из объектов, я знаю, что порядок сравнения изменился, и этот порядок в моих структурах данных (все из них!) можно восстановить, заменив измененный объект на "следующий больше".