프로그래밍/Python

[python] 클래스 타입 비교 (type, isinstance)

채윤아빠 2021. 9. 30. 22:27
728x90
반응형

type() 내장 함수

파이썬에서 객체에 대한 클래스 형을 확인하기 위해서 type() 내장 함수를 이용합니다.

import types

class Rectangle(object):
    def __init__(self, width, height):
        self.width = width
        self.height = height

r = Rectangle(3, 4)
print(type(r))

"""
<class '__main__.Rectangle'>
"""

type() 함수를 이용하면 다음과 같은 형식으로도 객체의 형을 확인할 수도 있지만, 좋은 방법은 아닙니다.

if ( type(r) == type(Rectanble(0, 0)) ): # 추가적이 객체를 생성함
    print('r is "Rectangle" instance.')

"""
r is "Rectangle" instance.
"""

if ( type(r).__name__ == Rectanble.__name__ ): # 동일한 이름의 클래스가 존재할 수 있음
    print('r is "Rectangle" instance.')

"""
r is "Rectangle" instance.
"""

위와 같이 비교하는 것보다 일반적인 방법은 아래와 같이 is 연산자를 이용하는 것입니다.

i = 10
if ( type(i) is int ):
    print('i is int')

"""
i is int
"""

f = 10.0
if ( type(f) is float ):
    print('f is float')

"""
f is float
"""

string = '10.0'
if ( type(string) is str ):
    print('string is str')

"""
string is str
"""

d = dict()
if ( type(d) is dict ):
    print('d is dict')

"""
d is dict
"""

if ( type(r) is Rectanble ):
    print('r is "Rectangle" instance.')

"""
r is "Rectangle" instance.
"""

isinstance() 내장 함수

특정 클래스로부터 인스턴스화된 것인지 확인하기 위해서는 isinstance() 내장 함수를 이용하면 됩니다.

if ( isinstance(r, Rectangle) ):
    print('r is "Rectangle" instance.')

"""
r is "Rectangle" instance.
"""

참고자료

https://docs.quantifiedcode.com/python-anti-patterns/readability/do_not_compare_types_use_isinstance.html