Python의 동적 리플렉션: Java의 Class.forName()과 동일
소개:
Java에서 Class.forName() 메서드는 정규화된 이름을 기반으로 클래스를 동적으로 로드합니다. Python은 유사한 기능을 제공하지만 동적 특성을 활용하여 더 뛰어난 유연성을 제공합니다.
Python의 Reflection:
Python의 Reflection을 사용하면 런타임 중에 클래스와 개체를 검사하고 조작할 수 있습니다. 런타임 시 코드를 검사하고 수정하기 위한 강력한 도구 세트를 제공합니다.
동적 클래스 로딩:
Class.forName()과 유사하게 클래스를 동적으로 로드할 수 있습니다. 몇 가지 접근 방식을 사용하는 Python:
1. getattr() 사용:
getattr()을 사용하면 문자열로 저장된 이름을 기반으로 클래스 속성에 액세스할 수 있습니다. 예:
<code class="python">module = __import__("module_name") class_name = "Class" cls = getattr(module, class_name)</code>
2. __import__() 함수 사용:
이 함수는 모듈을 가져오고 최상위 모듈 객체를 반환합니다. 그런 다음 점 표기법을 사용하여 모듈 내의 클래스에 액세스할 수 있습니다.
<code class="python">module = __import__("module_name.submodule.class_name", fromlist=["*"]) cls = module.class_name</code>
사용 예:
다음 Python 코드는 getattr()를 사용한 동적 클래스 로딩을 보여줍니다.
<code class="python">def get_class(class_name): parts = class_name.split('.') module = ".".join(parts[:-1]) m = __import__(module) for part in parts[1:]: m = getattr(m, part) return m # Usage my_class = get_class("my_package.my_module.MyClass") instance = my_class()</code>
결론:
Python의 동적 리플렉션은 런타임 시 클래스를 로드하고 조작하기 위한 유연한 메커니즘을 제공합니다. 동적 클래스 조작에 대한 보다 다양한 접근 방식에서 Java의 Class.forName()과 다릅니다.
위 내용은 Python은 Java의 Class.forName()과 유사한 동적 클래스 로딩을 어떻게 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!