Операции присваивания пользовательских объектов не копируют и не перезаписывают их. x1
и x2
являются переменными, содержащими ссылки на их соответствующие объекты. Когда вы пишете:
x1 = x2
Вы говорите: «x1 должен ссылаться на тот же объект, что и x2». Вы никоим образом не изменяете объект, на который изначально ссылается x1
. Если вы хотите, чтобы только атрибут state
копировался с одного объекта на другой, вам нужно сделать:
x1.set_state(x2.get_state())
Что вызывает set_state
для объекта, на который ссылается x1 (xobj1).
И так далее, для каждого атрибута, который необходимо передать. Чтобы сделать его чище, вы можете создать новый метод в классе X:
def copy_state(self, other):
self.set_state(other.get_state())
self.set_x(other.get_x())
...
Кроме того, чтобы сделать методы получения и очистки более чистыми, вы должны изучить properties , который является "чистым" способом в python для создания инкапсулированных атрибутов.