Прочитав статью, я догадываюсь, это проблема циклических ссылок. Если написать по-другому, то все работает ожидаемо:
_instance = None
class Test(object):
@classmethod
def instance(cls):
global _instance
if _instance is None:
_instance = cls()
return _instance
def __init__(self):
print '__init__'
def __del__(self):
print '__del__'
def test(self):
return 1
Это, конечно, не выход, инстанс должен быть инкапсулирован. Но найденные мной варианты синглтона для пайтона не учитывают нужность деструктора и выглядят как мой первый вариант.Мне просто вспоминается, что как правило он нужен для каких-то ресурсов, выделение которых затратно - например, подключение к базе. Соответственно, в конструкторе нужно подключиться к ней, а в деструкторе - отключиться, чтобы не повисло лишнее подключение. Понятно, что есть Django, где все уже реализовано, но теоретический интерес остается ) Нужно инкапсулировать инстанс и при этом сохранить выполнение метода del. Кто-нибудь реализовывал такое?
Updated 10 Dec. 2012, 10:58 by Andre_487.