비슷한 질문을 읽었지만 답을 찾을 수 없었습니다.
이 질문은 하지 접근에 대한 예를 외부 클래스 또는 그것의 방법,의를하지만, 외부 액세스에 대한 클래스 객체 정상 작업해야합니다. __qualname__
외부 클래스의 이름에 대한 정보를 포함하는 즉시 외부 클래스 개체에 동적으로 액세스 할 수없는 이유가 없습니다.
이 예제는 다음을 수행합니다.
class Outer:
class Inner:
@classmethod
def parent_class(cls):
outer_name = cls.__qualname__.split('.')[-2]
outer_cls = globals()[outer_name]
print(outer_cls)
Outer.Inner.parent_class() # <class '__main__.Outer'>
그러나 parent_class
다른 모듈에 배치 된 함수 에서는 작동하지 않습니다 .
# some.py
class Some:
@classmethod
def parent_class(cls):
outer_name = cls.__qualname__.split('.')[-2]
outer_cls = globals()[outer_name]
print(outer_cls)
# main.py
from some import Some
class Outer:
class Inner(Some):
pass
Outer.Inner.parent_class() # KeyError: 'Outer'
모든 중첩 클래스에 클래스 객체를 추가하는 Outer의 클래스 데코레이터로 해결할 수 있다고 생각하지만, 외부 클래스 객체를 얻는 "깨끗한"방법이 있습니까?
이 솔루션은 모든 경우에 작동하는 것처럼 보입니다.
import sys
class Outer:
class Inner:
@classmethod
def parent_class(cls):
outer_name = cls.__qualname__.split('.')[-2]
outer_module = sys.modules[cls.__module__]
outer_cls = vars(outer_module)[outer_name]
print(outer_cls)
Outer.Inner.parent_class() # <class '__main__.Outer'>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다