Chained Factories pattern ========================= This example demonstrates "Chained Factories" pattern. The idea of the pattern is in wrapping ``Factory`` into another ``Factory`` that adds additional arguments. .. code-block:: python base_factory = providers.Factory( SomeClass, base_argument=1, ) concrete_factory = providers.Factory( base_factory, extra_argument=2, ) if __name__ == '__main__': instance = concrete_factory() # Same as: # instance = SomeClass(base_argument=1, extra_argument=2) Sample code ----------- Listing of the pattern example: .. literalinclude:: ../../examples/miniapps/factory-patterns/chained_factories.py :language: python Arguments priority ------------------ Passing of the arguments works the same way like for any other :ref:`factory-provider`. .. code-block:: python # 1. Keyword arguments of upper level factory are added to lower level factory chained_dict_factory = providers.Factory( providers.Factory(dict, arg1=1), arg2=2, ) print(chained_dict_factory()) # prints: {'arg1': 1, 'arg2': 2} # 2. Keyword arguments of upper level factory have priority chained_dict_factory = providers.Factory( providers.Factory(dict, arg1=1), arg1=2, ) print(chained_dict_factory()) # prints: {'arg1': 2} # 3. Keyword arguments provided from context have the most priority chained_dict_factory = providers.Factory( providers.Factory(dict, arg1=1), arg1=2, ) print(chained_dict_factory(arg1=3)) # prints: {'arg1': 3} Credits ------- The "Chained Factories" pattern was suggested by the ``Dependency Injector`` users. .. disqus::