<개인공부>/[Python]

[python] 파이썬 isinstance 타입 확인 함수 설명과 예제

BlockDMask 2021. 6. 8. 00:30
반응형

안녕하세요. BlockDMask입니다.
오늘은 파이썬에서 "이 타입이 니 타입이냐~" 하는 타입, 클래스, 객체 비교 확인 함수인 isinstance 함수에 대해서 알아보겠습니다.

<목차>
1. 파이썬 isinstance 함수 설명
2. 파이썬 isinstance 함수 예제

 

 

1. python isinstance 함수 설명


우리가 기본적으로 데이터의 타입을 확인하는 함수인 type이라는 함수를 알고 있긴 합니다.
이 type이라는 함수로 뭔가 타입을 비교하는 것은 조금 힘듭니다. type 함수 포스팅 [바로가기]
하지만, isinstance는 쉽고 간편합니다.

 

1-1) isinstance 함수 모양

isinstance(확인하고자 하는 데이터 값, 확인하고자 하는 데이터 타입)

언어를 조금 바꿔서 말하면 아래와 같습니다.

isinstance(인스턴스, 데이터나 클래스 타입)

첫 번째 매개변수 : 확인하고자 하는 데이터의 값, 객체, 인스턴스
두 번째 매개변수 : 확인하고자 하는 데이터의 타입, 클래스
반환 값 : 인스턴스와 타입이 같으면 True를 반환하고, 다르면 False를 반환합니다.

isinstance의 인자와 반환 값의 설명은 위와 같습니다.

그리고 함수 정의를 좀 더 정확하게 이야기하자면
공식 문서에는 아래와 같이 정의되어있습니다. 눈에 익혀두면 좋을 것 같습니다.

isinstance(object, classinfo)

이제, 바로 아래에 간단 사용법을 보실까요?

 

1-2) isinstance 간단 사용법

숫자 33이 int 타입인지 확인이 필요하다고 하면

result = isinstance(33, int)

이런 식으로 사용하면 됩니다. 

 

 

2. python isinstance 함수 예제


1-1) 일반적인 isinstance 예제

# 정수인지 확인
result1 = isinstance(100, int)
print(f'isinstance(100, int) : {result1}')


# 실수인지 확인
result2 = isinstance(100, float)
print(f'isinstance(100, float) : {result2}')


# 문자열인지 확인
result3 = isinstance('BlockDMask', str)
print(f'isinstance("BlockDMask", str) : {result3}')


# 리스트인지 확인
result4 = isinstance([1,2,3], list)
print(f'isinstance([1,2,3], list) : {result4}')


# 해당 클래스의 인스턴스인지 확인1
class School:
    pass

sc = School()

result5 = isinstance(sc, School)
print(f'isinstance(sc, School()) : {result5}')


# 해당 클래스의 인스턴스인지 확인2
class KimChi:
    pass

kc = KimChi()

result6 = isinstance(kc, School)
print(f' isinstance(kc, School) : {result6}')

이렇게 result1, 2, 3, 4번을 보면
isinstance 함수를 통해서 int 타입인지, float 타입인지, str 타입인지, list 타입인지 각각 확인이 가능합니다.

특히 result5, result6을 보면 특정 객체가 해당 클래스의 인스턴스인지 확인 또한 가능합니다.

많이 유용하겠죠?

 

 

1-2) 사실은 여러 타입 확인이 가능한 isinstance

isinstance의 두 번째 인자인 "확인하고자 하는 타입"은 사실 튜플 형식으로 여러 개를 넣을 수 있습니다.
그러면 첫 번째 인자가 그 두 번째 튜플로 들어가 있는 타입 중에 하나라도 만족을 한다면 True가 나오게 됩니다.

"숫자 33아 네가 int, float, str 중에 하나의 타입을 만족하니?" 이런 확인이 가능하다는 것입니다.
바로 예제를 보시죠

# 정수, 실수, 문자열 중에 하나인가?
result1 = isinstance(100, (int, float, str))
print(f'isinstance(100, (int, float, str)) : {result1}')


# 정수, 실수, 리스트 중에 하나인가?
result2 = isinstance("blog", (int, float, list))
print(f'isinstance("blog", (int, float, list)) : {result2}')

이렇게 isinstance의 두 번째 인자에 튜플 형식으로 타입을 넣으면 여러 타입 중 하나인지를 확인할 수 있습니다.

 

 

1-3) 상속 관계일 때의 isinstance 예제

상속관계일 때 isinstance 확인에서 주의하실 것이 있습니다.
바로 부모 타입과 비교를 할 때인데요. 바로 예제로 확인해보겠습니다.

# 부모 클래스
class Parent:
    pass

# 자식 클래스
class Child(Parent):
    pass


p = Parent()
c = Child()

# 각각 인스턴스인지 확인 (둘다 True)
result1 = isinstance(p, Parent)
result2 = isinstance(c, Child)
print(f'isinstance(부모 인스턴스, 부모 클래스) : {result1}')
print(f'isinstance(자식 인스턴스, 자식 클래스) : {result2}')


# 부모가 자식의 인스턴스인지 (False)
result3 = isinstance(p, Child)
print(f'isinstance(부모 인스턴스, 자식 클래스) : {result3}')


# 자식이 부모의 인스턴스인지 확인 (True)
result4 = isinstance(c, Parent)
print(f'isinstance(자식 인스턴스, 부모 클래스) : {result4}')

result1, result2를 보면
본인 클래스의 객체랑 본인 클래스랑 비교하는 것 이기 때문에 당연히 True가 나오는 게 맞습니다.

result3을 보면
isinstance(부모, 자식) 이렇게인데 False 인 것을 알 수 있습니다. 

result4를 보면
isinstance(자식, 부모) 이렇게 일 때는 True 인 것을 알 수 있습니다.
상속을 받으면, 자식 클래스는 isinstance에서 부모 클래스로 확인하는 경우 True가 나오게 된다. 꼭 알아두시기 바랍니다.

 

 

감사합니다. 이상으로 파이썬에서 이 객체가 니 객체이냐~ 하고 확인하는 함수인
isinstance 함수에 대해서 알아보았습니다.

반응형