Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python의 type()과 isinstance() 함수로 객체 타입 확인하기

이 글에서는 Python 3.x(및 그 이전 버전)에서 사용할 수 있는 isinstance() 함수와 type() 함수에 대해 알아보겠습니다. 이 두 메서드는 객체의 참조 관계와 데이터 타입을 확인할 때 주로 사용되며, 조건문과 함께 활용하면 더욱 강력한 타입 검증 로직을 구현할 수 있습니다.

isinstance() 메서드란?

isinstance()는 특정 객체가 지정한 클래스나 데이터 타입의 인스턴스인지 여부를 판별하는 내장 함수입니다. 상속 관계까지 고려하여 검사하기 때문에, 클래스 기반 프로그래밍에서 객체의 타입을 확인할 때 매우 유용합니다.

문법

isinstance(object_entity, comparison_equivalent)

반환값 — object_entity가 comparison_equivalent와 일치하면 True, 일치하지 않으면 False를 반환합니다. 두 번째 인자에는 튜플 형태로 여러 타입을 전달할 수도 있습니다.

isinstance() 예제 1: 클래스 인스턴스 확인

class Test:
    var = 786
TestInstance = Test()
print(isinstance(TestInstance, Test))
print(isinstance(TestInstance, (list, tuple)))
print(isinstance(TestInstance, (list, tuple, Test)))

실행 결과

True
False
True

첫 번째와 세 번째 줄이 True를 출력한 이유는 TestInstance가 Test 클래스의 인스턴스이기 때문입니다. 반면 두 번째 줄은 list와 tuple 중 어느 것과도 일치하지 않아 False가 출력됩니다. 이처럼 튜플로 여러 타입을 묶어 전달하면, 그중 하나라도 일치하면 True를 반환합니다.

isinstance() 예제 2: 기본 자료형 확인

Test = [1, 2, 3]
result = isinstance(Test, list)
print(Test, 'list:', result)
result = isinstance(Test, dict)
print(Test, 'dict:', result)
result = isinstance(Test, (dict, list))
print(Test, 'dict or list:', result)

실행 결과

[1, 2, 3] list: True
[1, 2, 3] dict: False
[1, 2, 3] dict or list: True

위 예제에서 Test 변수는 리스트이므로 list와 비교했을 때만 True가 출력됩니다. dict와 비교했을 때는 False이며, dict 또는 list 중 하나와 일치하는지 검사한 세 번째 경우에는 list가 포함되어 있으므로 True가 반환됩니다.

type() 메서드란?

type()은 인자로 전달된 객체의 정확한 타입을 그대로 반환하는 내장 함수입니다. isinstance()와 달리 상속 관계를 고려하지 않고 해당 객체의 실제 클래스를 알려줍니다.

문법

type(entity)

반환값 — 인자로 전달된 entity의 타입(클래스)을 반환합니다.

type() 예제: 다양한 자료형의 타입 출력

Dictinp = {1:'Tutorial', 2:'Point'}
print(type(Dictinp))
Listinp = ['t','u','t']
print(type(Listinp))
Tupleinp = ('Tut', 'orial', 'Point')
print(type(Tupleinp))

실행 결과

<class 'dict'>
<class 'list'>
<class 'tuple'>

출력 결과를 보면 각 객체가 어떤 클래스에 속하는지 명확하게 확인할 수 있습니다. 이렇게 얻은 타입 정보는 비교 연산이나 조건문에서 그대로 활용할 수 있습니다.

type()을 활용한 조건문 예제

Listinp = ['t','u','t']
Tupleinp = ('Tut', 'orial', 'Point')
if type(Listinp) is not type(Tupleinp):
    print("Type mismatch")
else:
    print("Type match")

실행 결과

Type mismatch

리스트와 튜플은 서로 다른 데이터 타입이므로 "Type mismatch"가 출력됩니다. 이처럼 type()으로 얻은 결과를 is 연산자와 함께 사용하면 두 객체의 타입이 동일한지 손쉽게 비교할 수 있습니다.

마무리

이번 글에서는 Python 3.x에서 객체의 타입과 인스턴스를 확인하는 방법으로 isinstance()와 type() 함수의 사용법을 살펴보았습니다. isinstance()는 상속 관계를 포함한 유연한 타입 검사에 적합하고, type()은 객체의 정확한 클래스를 확인하거나 타입 간 비교에 유용합니다. 두 함수의 차이를 잘 이해하고 상황에 맞게 활용한다면, 더 안정적이고 오류 없는 파이썬 코드를 작성하는 데 큰 도움이 될 것입니다.