동적으로 인스턴스를 생성하는 __getattr__과 같은 기능으로 모듈을 확장하려면 클래스를 생성하고 모듈에 존재하지 않는 속성에 액세스할 때 해당 클래스의 메서드를 호출합니다.
getattr 메서드는 일반적으로 클래스에서 작동하지만, 모듈에 직접 적용할 수 없습니다. 이 문제를 해결하기 위해 속성 액세스를 대체 클래스의 인스턴스로 리디렉션하는 래퍼 함수를 구현할 수 있습니다.
<code class="python">class Wrapper: def __init__(mod): setattr(mod, '__getattr__', getattrmod)</code>
이 래퍼 클래스는 사용자 정의된 getattr getattrmod라는 메서드.
<code class="python">sys.modules[__name__] = Wrapper</code>
모듈 자체를 래퍼로 교체하면 향후 모든 속성 액세스가 모듈은 getattr 메서드에 의해 차단됩니다.
<code class="python">def getattrmod(mod, attr): # Create an instance of the substitution class instance = Class() # Invoke the method with the same name as the missing attribute return getattr(instance, attr)</code>
위 내용은 모듈에서 __getattr__과 같은 동작으로 동적 속성 액세스를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!