다중 상속으로 클래스 정의하기
파이썬에서는 하나의 자식 클래스가 여러 개의 부모 클래스로부터 동시에 상속받을 수 있습니다. 이를 다중 상속(multiple inheritance)이라고 하며, 아래와 같이 작성합니다.
class A: # A 클래스 정의
.....
class B: # B 클래스 정의
.....
class C(A, B): # A와 B를 모두 상속받는 하위 클래스
.....
위 예제에서 C 클래스는 A와 B 두 클래스를 부모로 가지므로, 두 부모 클래스의 속성과 메서드를 모두 물려받게 됩니다.
issubclass() 함수란?
issubclass() 함수는 두 클래스 사이의 상속 관계를 확인할 때 사용하는 파이썬 내장 함수입니다. 기본 문법은 다음과 같습니다.
issubclass(sub, sup)
이 함수는 불리언(boolean) 값을 반환하며, 그 동작은 다음과 같습니다.
- 첫 번째 인자
sub가 두 번째 인자sup의 실제 하위 클래스(서브클래스)라면 True를 반환합니다. - 상속 관계가 아니라면 False를 반환합니다.
실전 예제
간단한 예제를 통해 동작을 확인해 보겠습니다.
class A:
pass
class B(A): # B는 A를 상속
pass
print(issubclass(B, A)) # True → B는 A의 하위 클래스
print(issubclass(A, B)) # False → A는 B의 하위 클래스가 아님
B 클래스는 A 클래스를 상속했기 때문에 issubclass(B, A)는 True를 반환하고, 반대 방향인 issubclass(A, B)는 False를 반환합니다.
isinstance()와의 차이점
주의할 점은 issubclass()가 클래스 객체 자체의 상속 관계를 확인하는 함수라는 것입니다. 만약 어떤 객체(인스턴스)가 특정 클래스에 속하는지 확인하고 싶다면 isinstance() 함수를 사용해야 합니다.
b = B()
print(isinstance(b, B)) # True → b는 B의 인스턴스
print(isinstance(b, A)) # True → B가 A를 상속하므로 b는 A의 인스턴스이기도 함
이처럼 issubclass()는 클래스 간의 계층 구조를 검증하는 데 유용하며, 상속 기반 설계에서 타입을 안전하게 확인할 때 자주 활용됩니다.