Рассмотрим синтаксис декоратора:
def singleton_function (c):
print("singleton_function")
x = c()
return lambda : x
@singleton_function
class A:
pass
По сути, это говорит о том, что:
A = singleton_function(A)
И singleton_function()
создает один экземпляр A
, а затем возвращает функцию, которая указываетк этому экземпляру.
Таким образом, мы получаем
A = lambda: x
Где x - это экземпляр исходного класса A. Вызов A()
возвращает x
, который по-прежнему тот же самый экземпляр, что singleton_function()
первый созданный.