파이썬 isinstance() 사용법 3가지 및 주의사항

파이썬 isinstance() 함수는 type()와 더불어 객체의 타입을 사용할 때 사용하는 함수입니다. isinstance() 함수는 특정 객체가 특정 클래스나 데이터 타입의 인스턴스인지를 확인하는 역할을 합니다. 이를 통해 코드의 안정성을 높이고, 타입에 따른 분기 처리를 간단하게 할 수 있습니다. 이번 포스팅에서는 isinstance() 함수의 사용법과 유용한 활용 방법들을 살펴보겠습니다.


파이썬 isinstance() 함수의 기본 사용법

isinstance() 함수는 두 가지 인수를 받습니다. 첫 번째는 확인하려는 객체이고, 두 번째는 비교하려는 클래스 혹은 데이터 타입입니다. 반환값은 True 혹은 False이며, 해당 객체가 지정한 클래스의 인스턴스일 경우 True를 반환하고, 그렇지 않으면 False를 반환합니다. 기본적인 사용법은 다음과 같습니다.

Python
isinstance(객체, 클래스)

아래의 코드에서는 변수 xint 타입인지 확인합니다.

Python
x = 4096
print(isinstance(x, int))

다음과 같이 변수 x는 정수형(int)이므로 True 값이 출력되는 것을 확인할 수 있습니다.

그림 1. 파이썬 isinstance()로 정수형 데이터 확인
그림 1. 파이썬 isinstance()로 정수형 데이터 확인

다중 클래스 검사

isinstance()의 두 번째 인수는 단일 클래스뿐만 아니라, 튜플 형태로 여러 클래스를 받을 수도 있습니다. 이 경우, 객체가 튜플에 포함된 클래스 중 하나라도 해당되면 True를 반환합니다.

Python
x = 40.96
y = 4096
print(isinstance(x, (int, float)))
print(isinstance(y, (int, float)))

라인 3에서는 x 값이 40.96이라는 float 클래스의 값이므로 True를 반환합니다. 라인 4에서는 y 값이 4096이라는 int 클래스의 값이므로 True를 반환하게 됩니다.

그림 2. 파이썬 isinstance()로 여러 클래스 확인
그림 2. 파이썬 isinstance()로 여러 클래스 확인

다중 클래스 검사의 장점은 함수나 메서드에서 다양한 데이터 타입을 허용해야 할 때 매우 유용합니다. 이를 통해 코드가 보다 유연해질 수 있으며, 잘못된 타입의 데이터를 처리할 가능성을 줄일 수 있습니다.

isinstance()를 사용해야 하는 이유: type()과 비교

파이썬에는 객체의 타입을 확인하는 다른 방법으로 type() 함수도 존재합니다. 하지만 type() 함수와는 달리 isinstance() 함수는 객체의 상속 관계를 고려합니다. 예를 들어, 하위 클래스가 상위 클래스의 상속을 받았는지는 isinstance()로 확인할 수 있지만, type() 함수로는 해당 클래스만을 확인할 수 있습니다.

Python
class Animal:
    pass

class Cat(Animal):
    pass

cat = Cat()

print(isinstance(cat, Animal))
print(type(cat) == Animal)

isinstance() 함수는 cat 객체가 Animal 클래스에서 상속받은 것이기 때문에 True를 반환하지만, type() 함수는 Cat 클래스의 인스턴스만을 정확하게 일치해야 True를 반환합니다.

그림 3. 파이썬 isinstance()와 type()의 차이: 상속 클래스 확인 여부
그림 3. 파이썬 isinstance()와 type()의 차이: 상속 클래스 확인 여부

isinstance()의 주의사항

  • 타입 체크에 너무 의존하지 않기: 파이썬은 동적 타이핑(dynamic typing)을 지원하는 언어입니다. 타입을 너무 엄격하게 체크하면 파이썬의 유연성을 해칠 수 있습니다. 따라서, 정말 필요한 경우에만 isinstance()를 사용하는 것이 좋습니다.
  • 튜플로 클래스 제공 시 주의: 두 번째 인수로 전달하는 클래스들을 튜플로 제공할 때, 해당 튜플이 올바르게 작성되었는지 확인해야 합니다. 실수로 리스트를 전달하거나, 다른 데이터 타입을 넣으면 “TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union” 오류가 발생할 수 있습니다.
그림 4. 파이썬 isinstance()의 두 번째 인수는 반드시 튜플로 제공할 것
그림 4. 파이썬 isinstance()의 두 번째 인수는 반드시 튜플로 제공할 것

정리

isinstance() 함수는 파이썬에서 객체의 타입을 확인할 때 매우 유용한 도구입니다. 기본적인 데이터 타입 검사뿐만 아니라 상속 관계에서도 올바르게 동작하기 때문에 type() 함수보다 더 자주 사용됩니다. 이를 활용하면 코드의 가독성을 높이고, 다양한 데이터 타입을 처리하는 함수를 작성할 수 있습니다. 그러나 파이썬의 동적 타이핑 특성을 고려해, 너무 많은 타입 체크는 피하는 것이 좋습니다.

isinstance()를 적절히 활용하여 객체의 타입을 안전하게 확인하고, 보다 유연한 코드를 작성해 보세요!

참고자료

관련 포스트

Leave a Comment