Vengo dal mondo C#, quindi le mie visualizzazioni potrebbero essere leggermente distorte. Sto cercando di fare DI in Python, tuttavia sto notando una tendenza con le librerie in cui sembrano fare affidamento su un localizzatore di servizi. Cioè, devi legare la creazione dell'oggetto al framework, ad esempio injectlib.build(MyClass)
per ottenere un'istanza di MyClass
.Can Python può fare perfettamente senza fare affidamento su un localizzatore di servizi?
Ecco un esempio di ciò che intendo -
from injector import Injector, inject
class Inner(object):
def __init__(self):
self.foo = 'foo'
class Outer(object):
@inject(inner=Inner)
def __init__(self, inner=None):
if inner is None:
print('inner not provided')
self.inner = Inner()
else:
print('inner provided')
self.inner = inner
injector = Injector()
outer = Outer()
print(outer.inner.foo)
outer = injector.get(Outer)
print(outer.inner.foo)
C'è un modo in Python per creare una classe, mentre inferire automaticamente i tipi di dipendenza basato sui nomi dei parametri? Quindi, se ho un parametro costruttore chiamato my_class
, verrà iniettata un'istanza di MyClass
. La ragione che chiedo è che non vedo come potrei iniettare una dipendenza in una classe che viene creata automaticamente tramite una libreria di terze parti.
Ottima risposta! Sono d'accordo ora dopo aver fatto Python costantemente negli ultimi mesi che, a differenza di dove provengo (C#), Python non richiede realmente DI. In effetti, odiavo mescolare i due. –