Лучший способ хранить данные типа - PullRequest
0 голосов
/ 02 мая 2019

Я хочу написать функцию 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, мне это не нравится.

На самом деле, я пишу библиотеку, которая должна иметь возможность хранить любые метаданные любых типов.

Есть ли другие варианты?

...