>  기사  >  백엔드 개발  >  Python에서 특정 클래스의 하위 클래스를 어떻게 찾을 수 있나요?

Python에서 특정 클래스의 하위 클래스를 어떻게 찾을 수 있나요?

DDD
DDD원래의
2024-11-16 01:39:03889검색

How can I find the subclasses of a given class in Python?

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

Python에서는 __subclasses__( ) 방법. 이 방법은 "object" 클래스에서 상속되고 Python 3에서 일반적으로 사용되는 새로운 스타일 클래스에 사용할 수 있습니다.

하위 클래스의 이름을 얻으려면:

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

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

또는 하위 클래스 자체를 검색하려면:

Foo.__subclasses__()
# [<class '__main__.Bar'>, <class '__main__.Baz'>]

기본 클래스 연결을 확인하려면:

for cls in Foo.__subclasses__():
    print(cls.__base__)
# <class '__main__.Foo'>
# <class '__main__.Foo'>

재귀적 하위 클래스 검색:

If 하위 하위 클래스(손자 등)를 캡처해야 하는 경우 재귀적 접근 방식이 필요합니다.

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

all_subclasses(Foo)
# {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}

참고: 하위 클래스의 클래스 정의가 실행되지 않은 경우(예: 해당 모듈은 가져오지 않음) __subclasses__()로 감지할 수 없습니다.

클래스 이름에서 하위 클래스 얻기:

대신 클래스 이름을 문자열로 사용하세요. 이 경우 다음 단계를 따르세요.

  1. 클래스 이름을 사용하여 클래스 개체를 찾습니다.

    • 동일한 모듈에 있는 경우:

      cls = globals()[name]
    • 모든 모듈에 있는 경우:

      import importlib
      modname, _, clsname = name.rpartition('.')
      mod = importlib.import_module(modname)
      cls = getattr(mod, clsname)
  2. __subclasses__()를 사용하여 다음의 하위 클래스를 가져옵니다. 검색된 클래스 객체입니다.

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

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