Итак, у меня возникла проблема, которую я не понимал, когда переменная отображается по-разному, в зависимости от функции, которую я использовал в контейнере, имеющем ее в качестве атрибута.Мне удалось свести его к следующему коду:
import copy
from functools import wraps
def do_wrapping(func):
@wraps(func)
def wrapper(*args):
return func(*args)
return wrapper
class Container:
def __init__(self, var):
self.var = var
self.show = self._show_method
@property
def show(self):
return self._show
@show.setter
def show(self, shower):
self._show = do_wrapping(shower)
def _show_method(self):
print(self.var)
first_container = Container(1)
second_container = copy.deepcopy(first_container)
second_container.var = 0
second_container.show()
second_container._show_method()
Я хотел бы, чтобы оба метода распечатали 0
, но первый печатает 1
.Эта проблема решается с помощью этой строки second_container.show = second_container._show_method
, но я бы хотел ее избежать, так как она кажется довольно хакерской.
В моем реальном случае обёртка немного сложнее, поэтому я не могу от нее избавиться.Если вы удалите упаковку, она работает как положено.Я предполагаю, что когда обернута, функция вроде как «установлена в камне», но я не знаю, как это объяснить.
Так что мой вопрос состоит из двух частей: - почему этот код не работает должным образом (2 выхода 0
)?- как мне это исправить?