소개
Java의 경우 Dependency Injection은 순수 OOP로 작동합니다. 즉, 구현할 인터페이스를 제공하고 프레임 워크 코드에서 정의 된 인터페이스를 구현하는 클래스의 인스턴스를 수락합니다.
이제 Python의 경우 동일한 방식으로 수행 할 수 있지만 Python의 경우에는 그 방법이 너무 많은 오버 헤드라고 생각합니다. 그렇다면 파이썬 방식으로 어떻게 구현할까요?
사용 사례
이것이 프레임 워크 코드라고 가정합니다.
class FrameworkClass():
def __init__(self, ...):
...
def do_the_job(self, ...):
# some stuff
# depending on some external function
기본 접근 방식
가장 순진한 (그리고 아마도 가장 좋은?) 방법은 FrameworkClass생성자에 외부 함수를 제공 한 다음 do_the_job메서드 에서 호출되도록하는 것입니다.
프레임 워크 코드 :
class FrameworkClass():
def __init__(self, func):
self.func = func
def do_the_job(self, ...):
# some stuff
self.func(...)
클라이언트 코드 :
def my_func():
# my implementation
framework_instance = FrameworkClass(my_func)
framework_instance.do_the_job(...)
질문
질문은 짧습니다. 이를 위해 더 일반적으로 사용되는 Pythonic 방법이 있습니까? 아니면 그러한 기능을 지원하는 라이브러리가 있습니까?
업데이트 : 구체적인 상황
토큰을 사용하여 인증을 처리하는 마이크로 웹 프레임 워크를 개발한다고 상상해보십시오. 이 프레임 워크 ID에는 토큰에서 얻은 일부를 제공하고 이에 해당하는 사용자를 가져 오는 함수가 필요 합니다 ID.
분명히 프레임 워크는 사용자 또는 기타 애플리케이션 특정 로직에 대해 전혀 알지 못하므로 클라이언트 코드는 인증이 작동하도록 프레임 워크에 사용자 getter 기능을 삽입해야합니다.
AttributeErrororTypeError가 그렇지 않으면 발생 한다고 가정 ). 그렇지 않으면 동일합니다.