> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 클래스의 모든 하위 클래스를 어떻게 찾을 수 있습니까?

Python에서 클래스의 모든 하위 클래스를 어떻게 찾을 수 있습니까?

Patricia Arquette
풀어 주다: 2024-11-15 06:05:02
원래의
551명이 탐색했습니다.

How Can I Find All Subclasses of a Class in Python?

Python에서 클래스의 모든 하위 클래스 찾기

Python의 지정된 기본 클래스에서 상속된 모든 클래스를 검색하려면 __subclasses__()를 활용하세요. 방법. 이 메서드는 객체 클래스(Python 3의 기본값)를 확장하는 새로운 스타일 클래스에 사용할 수 있습니다. 작동 방식은 다음과 같습니다.

class Foo(object): pass
class Bar(Foo): pass
class Baz(Foo): pass
class Bing(Bar): pass

print([cls.__name__ for cls in Foo.__subclasses__()])
# ['Bar', 'Baz']

print(Foo.__subclasses__())
# [<class '__main__.Bar'>, <class '__main__.Baz'>]
로그인 후 복사

하위 하위 클래스를 포함하려면 재귀를 사용할 수 있습니다.

def all_subclasses(cls):
    return set(cls.__subclasses__()).union(
        [s for c in cls.__subclasses__() for s in all_subclasses(c)])

print(all_subclasses(Foo))
# {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
로그인 후 복사

참고: 아직 정의되지 않은 하위 클래스(예: 가져오지 않은 모듈로 인해)는 __subclasses__()에 의해 감지되지 않습니다.

클래스 이름 문자열을 사용하여 하위 클래스 찾기:

클래스 이름만 문자열로 사용할 수 있는 경우 , 다음 단계가 필요합니다:

  1. 클래스 이름을 사용하여 클래스를 찾습니다.
  2. 찾은 클래스의 하위 클래스를 검색하려면 __subclasses__()를 활용합니다.

이름 문자열에서 클래스 찾기:

이름 문자열에서 클래스를 찾는 방법은 예상 위치에 따라 다릅니다.

  • 동일한 모듈 내에서 예상되는 경우:

    cls = globals()[name]
    로그인 후 복사
  • locals 네임스페이스 내에서 예상되는 경우:

    cls = locals()[name]
    로그인 후 복사
  • 모듈 내 임의의 경우:

    import importlib
    modname, _, clsname = name.rpartition('.')
    mod = importlib.import_module(modname)
    cls = getattr(mod, clsname)
    로그인 후 복사

클래스를 찾으면 해당 __subclasses__() 메서드를 사용하여 원하는 하위 클래스 목록을 검색할 수 있습니다.

위 내용은 Python에서 클래스의 모든 하위 클래스를 어떻게 찾을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿