Python Dependency Injection Framework

后端 未结 18 2200
你的背包
你的背包 2020-12-12 14:10

Is there a framework equivalent to Guice (http://code.google.com/p/google-guice) for Python?

18条回答
  •  悲哀的现实
    2020-12-12 14:18

    Will leave my 5 cents here :)

    https://pypi.python.org/pypi/dependency_injector

    """Pythonic way for Dependency Injection."""
    
    from dependency_injector import providers
    from dependency_injector import injections
    
    
    @providers.DelegatedCallable
    def get_user_info(user_id):
        """Return user info."""
        raise NotImplementedError()
    
    
    @providers.Factory
    @injections.inject(get_user_info=get_user_info)
    class AuthComponent(object):
        """Some authentication component."""
    
        def __init__(self, get_user_info):
            """Initializer."""
            self.get_user_info = get_user_info
    
        def authenticate_user(self, token):
            """Authenticate user by token."""
            user_info = self.get_user_info(user_id=token + '1')
            return user_info
    
    
    print AuthComponent
    print get_user_info
    
    
    @providers.override(get_user_info)
    @providers.DelegatedCallable
    def get_user_info(user_id):
        """Return user info."""
        return {'user_id': user_id}
    
    
    print AuthComponent().authenticate_user(token='abc')
    # {'user_id': 'abc1'}
    

    UPDATED

    Some time passed and Dependency Injector is a bit different now. It's better to start from Dependency Injector GitHub page for getting actual examples - https://github.com/ets-labs/python-dependency-injector

提交回复
热议问题