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

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

Patricia Arquette
Patricia Arquette원래의
2024-11-15 06:05:02554검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.