파이썬 다중 상속 기본 개념
파이썬은 하나의 클래스가 여러 부모 클래스로부터 동시에 상속받을 수 있는 다중 상속(Multiple Inheritance)을 지원합니다. 아래와 같이 클래스 C를 정의할 때 괄호 안에 두 개 이상의 부모 클래스를 나열하면 됩니다.
class A: # 클래스 A 정의
...
class B: # 클래스 B 정의
...
class C(A, B): # A와 B를 모두 상속받는 하위 클래스
...이처럼 다중 상속 구조에서는 특정 객체가 어느 클래스와 관계가 있는지 확인해야 할 때가 많습니다. 이럴 때 유용하게 사용되는 것이 바로 isinstance() 함수입니다.
isinstance() 함수란?
isinstance() 함수는 객체와 클래스 간의 관계를 확인하는 내장 함수로, 불리언(Boolean) 값을 반환합니다.
isinstance(obj, Class)
- obj: 검사하고자 하는 객체(인스턴스)
- Class: 비교 대상이 되는 클래스 또는 클래스 튜플
이 함수는 obj가 Class의 인스턴스이거나, Class를 상속받은 하위 클래스의 인스턴스일 경우 True를 반환하고, 그렇지 않으면 False를 반환합니다.
isinstance() 사용 예제
실제 코드로 동작 방식을 살펴보겠습니다.
class A:
pass
class B(A): # A를 상속받는 하위 클래스
pass
obj = B()
print(isinstance(obj, B)) # True → obj는 B의 인스턴스
print(isinstance(obj, A)) # True → obj는 A의 하위 클래스 인스턴스
print(isinstance(A(), B)) # False → A의 인스턴스는 B의 인스턴스가 아님isinstance() 활용 시 주의점
- 상속 관계까지 고려하기 때문에 단순한 타입 비교에는
type()보다isinstance()사용이 권장됩니다. - 두 번째 인자에 튜플을 전달하면 여러 클래스 중 하나라도 일치하는지 한 번에 확인할 수 있습니다. 예:
isinstance(obj, (A, B)) - 덕 타이핑(duck typing)을 지향하는 파이썬에서는 과도한 타입 검사보다 필요한 경우에만 사용하는 것이 좋습니다.