개요
파이썬에서 어떤 클래스가 다른 클래스의 슈퍼 클래스(상위 클래스)인지 확인해야 하는 경우가 종종 있습니다. 예를 들어 다음과 같이 두 클래스 A와 B가 정의되어 있다고 가정해 보겠습니다.
class A(object):
pass
class B(A):
pass여기서 B는 A를 상속받은 서브 클래스이며, 따라서 A는 B의 슈퍼 클래스입니다. 이 사실을 확인하는 방법은 크게 두 가지가 있습니다.
방법 1: issubclass() 함수 사용
내장 함수 issubclass()를 사용하면 첫 번째 인자가 두 번째 인자의 서브 클래스인지 여부를 불리언 값으로 확인할 수 있습니다. 결과가 True라면 A가 B의 슈퍼 클래스임을 의미합니다.
방법 2: __bases__ 속성 사용
클래스 객체의 __bases__ 속성을 조회하면 해당 클래스가 직접 상속받은 기반 클래스(슈퍼 클래스)들을 튜플 형태로 얻을 수 있습니다.
예제 코드
class A(object):
pass
class B(A):
pass
print(issubclass(B, A)) # issubclass()로 B가 A의 서브 클래스인지 확인
print(B.__bases__) # B의 기반 클래스(슈퍼 클래스) 확인실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
True (<class '__main__.A'>,)
정리
issubclass(B, A)가 True를 반환하면 B가 A의 서브 클래스, 즉 A가 B의 슈퍼 클래스임을 알 수 있습니다. 또한 B.__bases__를 출력하면 B가 직접 상속한 클래스들이 튜플로 표시되므로 그 안에 A가 포함되어 있는지 확인할 수 있습니다. 참고로 __bases__는 직계 부모 클래스만 보여주는 반면, issubclass()는 간접적으로 상속된 조상 클래스까지도 판별해 주므로 상속 관계를 검증할 때 더 유용합니다.