파이썬에서 객체의 타입을 확인하는 방법은 크게 두 가지가 있습니다. 객체가 정확히 특정 타입인지 확인하려면 type() 함수와 is 연산자를 사용하고, 상속 관계까지 고려해서 확인하려면 isinstance() 함수를 사용하는 것이 표준적인 방법입니다.
type()과 is로 정확한 타입 확인하기
객체 x가 특정 타입의 인스턴스인지 정확하게(즉, 서브클래스는 제외하고) 확인하고 싶다면, type()으로 타입을 얻은 뒤 is 연산자로 비교하면 됩니다.
예제
x = "Hello"
if type(x) is str:
print("x is an instance of str")출력 결과
x is an instance of str여기서 == 대신 is를 사용하는 것이 좋습니다. is는 객체의 동일성(identity)을 비교하기 때문에 더 빠르고 명확하며, __eq__ 메서드를 오버라이드한 클래스와의 의도치 않은 충돌도 피할 수 있습니다.
isinstance()로 상속 관계까지 확인하기
객체 x가 MyClass의 인스턴스이거나 MyClass를 상속받은 서브클래스의 인스턴스인지까지 확인하려면 isinstance()를 사용합니다.
예제
x = "Hello"
if isinstance(x, str):
print("x is an instance of str")출력 결과
x is an instance of strisinstance()는 두 번째 인수로 타입의 튜플을 받을 수 있어, 여러 타입을 한 번에 확인할 수 있다는 장점도 있습니다.
if isinstance(x, (str, int)):
print("x는 문자열 또는 정수입니다")어떤 방법을 사용해야 할까?
일반적으로는 isinstance()가 권장됩니다. 상속 관계를 자연스럽게 처리해 주기 때문에 코드가 더 유연해지고, 다형성(polymorphism)을 활용한 설계와 잘 어울립니다. 반면 type(x) is T는 정확히 해당 타입만 허용하고 싶은 경우에 유용합니다.
참고로 파이썬 커뮤니티에서는 덕 타이핑(duck typing) 철학에 따라, 가능하다면 명시적인 타입 검사보다 try/except문이나 hasattr()를 활용하는 것이 더 파이써닉(Pythonic)한 접근이라고 알려져 있습니다.