Я хочу написать функцию def singleton_of(cls): ...
, которая должна где-то хранить экземпляр.
Способы 1:
Сохранить экземпляр на setattr(cls, ..., instance)
, но некоторые встроенные типы не могутsetattr
.
Способ 2:
Хранить экземпляр в глобальном файле с указанием слабых ссылок (Dict[Type, object]
), но некоторые типы не могут создавать слабые ссылки.
Способ 3:
Хранить экземпляр в глобальном формате (Dict[Type, object]
), но некоторые типы не подлежат хэшированию и не могут собирать.
Способ 4:
Хранить экземпляр в глобальном списке(List[Tuple[Type, object]]
), но это имеет ужасную производительность запросов и не может собрать.
Путь 5:
запасной путь 1 к пути 4 один за другим.
Путь6:
Хранить экземпляр в замыкании (например, использовать декоратор в cls), но для этого нужно создать замыкание перед вызовом singleton_of
, мне это не нравится.
На самом деле, я пишу библиотеку, которая должна иметь возможность хранить любые метаданные любых типов.
Есть ли другие варианты?