"""Custom `Factory` example.""" import dependency_injector.providers as providers class User(object): """Example class User.""" class UsersFactory(providers.Provider): """Example users factory.""" __slots__ = ('_factory',) def __init__(self): """Initializer.""" self._factory = providers.Factory(User) super(UsersFactory, self).__init__() def __call__(self, *args, **kwargs): """Return provided object. Callable interface implementation. """ if self.last_overriding is not None: return self.last_overriding._provide(args, kwargs) return self._factory(*args, **kwargs) # Users factory: users_factory = UsersFactory() # Creating several User objects: user1 = users_factory() user2 = users_factory() # Making some asserts: assert isinstance(user1, User) assert isinstance(user2, User) assert user1 is not user2