"""`Factory` providers - building a complex object graph with deep init injections example.""" from dependency_injector import providers class Regularizer: def __init__(self, alpha): self.alpha = alpha class Loss: def __init__(self, regularizer): self.regularizer = regularizer class ClassificationTask: def __init__(self, loss): self.loss = loss class Algorithm: def __init__(self, task): self.task = task algorithm_factory = providers.Factory( Algorithm, task=providers.Factory( ClassificationTask, loss=providers.Factory( Loss, regularizer=providers.Factory( Regularizer, ), ), ), ) if __name__ == '__main__': algorithm_1 = algorithm_factory(task__loss__regularizer__alpha=0.5) assert algorithm_1.task.loss.regularizer.alpha == 0.5 algorithm_2 = algorithm_factory(task__loss__regularizer__alpha=0.7) assert algorithm_2.task.loss.regularizer.alpha == 0.7 algorithm_3 = algorithm_factory(task__loss__regularizer=Regularizer(alpha=0.8)) assert algorithm_3.task.loss.regularizer.alpha == 0.8