У меня есть 3 модуля: A, B, CPython инъекции зависимостей
A contains a set of classes that B has fetchers for.
B contains a bunch of singletons that just deal with caching created objects and providing them when requested. Essentially just fetchers.
C is a list of functions that requires instances of A.
Операция, которую мне нужно сделать что-то вдоль линий:
C::SomeFunc():
B.getInstance("instance ID")
B::getInstance(someID: str) -> A:
-look at cache, which is either [] or {}
-if it is in cache, return that, else do: A(someID)
Мой вопрос, как бы вы просматриваете экземпляры этих модулей? Этот вопрос в первую очередь мотивирован моим отсутствием понимания системы распределения памяти Python.
Я мог бы что-то сделать по строкам зависимостей зависимостей на основе конструктора, чтобы получить экземпляр A, B, C, куда им нужно идти, а затем иметь некоторый объект «мастер/бог/контроллер», который просто передает вещи, они должны идти -
, например:
class god(object):
def __init__(self):
a = A()
b = B()
c = C(b)
.....
.....
class C(object):
def __init__(self, B_instance):
self.B = B_instance
def SomeFunc(self, instanceID):
self.B.getInstance(instanceID)
, но это, кажется, как взломать.
Любые предложения?
Спасибо!
Я заинтригован тем, как вы храните ссылку на экземпляр 'singleton' внутри' classmethod'. Я никогда не видел зависимости, введенную статическим методом. Для обеспечения конечного времени жизни и сокращения глобального доступа, как вы думаете, можно хранить «singleton» в контейнере, а не в статическом методе? Например, было бы тривиальным изменением, хранящим его в отдельном классе, который более традиционно управляет зависимостями? – ecoe