глобальный кэш объектов Python - PullRequest
4 голосов
/ 09 октября 2010

Маленький вопрос относительно архитектуры приложения:

У меня есть скрипт Python, работающий как демон.

Внутри у меня много объектов, все они наследуются от одного класса (назовем его «сущность»)

У меня есть также один главный объект, пусть это будет «topsys»

Сущности идентифицируются парой (id, тип (= класс, примерно)), и они связаны во многих злых отношениях. Они также создаются и удаляются постоянно, и им необходим доступ к другим объектам.

Итак, мне нужен тип хранилища, в основном словарь словарей (по одному для каждого типа), содержащий все сущности.

И вопрос в том, что лучше: присоединить этот словарь к 'topsys' как к свойству объекта или к сущности класса, как к свойству класса? Я бы выбрал второе (поэтому сущности не должны знать о существовании «topsys»), но я не чувствую себя хорошо при использовании свойств непосредственно в классах. А может, есть другой способ?

Ответы [ 2 ]

6 голосов
/ 09 октября 2010

Здесь недостаточно подробностей, чтобы быть уверенным в том, что лучше, но в целом я бы сохранил фактический реестр объектов как глобальную переменную уровня модуля в верхнем классе и имел бы метод в базовом классе для доступаit.

_entities = []
class entity(object):
    @staticmethod
    def get_entity_registry(): 
         return _entities

Либо полностью скрыть _entites и предоставить несколько методов, например.get_object_by_id, register_object, так что вы сможете позже легче изменить само хранилище _entities.

Кстати, совет, если вы еще не там: вы, вероятно, захотите посмотретьв weakrefs при создании таких реестров объектов.

0 голосов
/ 09 октября 2010

Нет проблем с использованием свойств на классах.Классы тоже просто объекты.

В вашем случае, имея эту небольшую доступную информацию, я бы тоже выбрал свойство класса, потому что не создание зависимостей - это здорово, и иногда будет меньше беспокоиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...