Python에서 내장 함수 type() 및 isinstance()는 변수와 같은 객체의 유형을 가져오고 확인하고 특정 유형인지 여부를 확인하는 데 사용됩니다.
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
다음 내용은 샘플 코드와 함께 여기에 설명되어 있습니다.
- 객체 유형 획득 및 확인:
type()
- 객체 유형 결정:
type()
,isinstance()
- type()을 사용한 유형 결정
- isinstance()를 사용한 유형 결정
- type()과 isinstance()의 차이점
객체의 유형을 결정하는 대신 예외 처리나 내장 함수 hasattr()을 사용하여 객체에 올바른 메서드와 속성이 있는지 확인할 수 있습니다.
객체 유형 획득 및 확인:유형()
type(object)은 인수로 전달된 객체의 유형을 반환하는 함수입니다. 이것은 객체의 유형을 찾는 데 사용할 수 있습니다.
print(type('string'))
# <class 'str'>
print(type(100))
# <class 'int'>
print(type([0, 1, 2]))
# <class 'list'>
type()의 반환 값은 str 또는 int와 같은 유형 객체입니다.
print(type(type('string')))
# <class 'type'>
print(type(str))
# <class 'type'>
객체 유형 결정:type(),isinstance()
type() 또는 isinstance()를 사용하여 유형을 결정합니다.
type()을 사용한 유형 결정
type()의 반환 값을 임의의 형식과 비교하여 개체가 모든 형식인지 확인할 수 있습니다.
print(type('string') is str)
# True
print(type('string') is int)
# False
def is_str(v):
return type(v) is str
print(is_str('string'))
# True
print(is_str(100))
# False
print(is_str([0, 1, 2]))
# False
여러 유형 중 하나인지 확인하려면 in 연산자와 여러 유형의 튜플 또는 목록을 사용하십시오.
def is_str_or_int(v):
return type(v) in (str, int)
print(is_str_or_int('string'))
# True
print(is_str_or_int(100))
# True
print(is_str_or_int([0, 1, 2]))
# False
인수 유형에 따라 처리를 변경하는 함수를 정의하는 것도 가능합니다.
def type_condition(v):
if type(v) is str:
print('type is str')
elif type(v) is int:
print('type is int')
else:
print('type is not str or int')
type_condition('string')
# type is str
type_condition(100)
# type is int
type_condition([0, 1, 2])
# type is not str or int
isinstance()를 사용한 유형 결정
isinstance(object, class)는 첫 번째 인수의 객체가 두 번째 인수의 유형 또는 하위 클래스의 인스턴스인 경우 true를 반환하는 함수입니다.
두 번째 인수는 유형의 튜플일 수 있습니다. 두 유형 중 하나의 인스턴스인 경우 true가 반환됩니다.
print(isinstance('string', str))
# True
print(isinstance(100, str))
# False
print(isinstance(100, (int, str)))
# True
type()을 사용한 유형 결정의 예와 유사한 함수는 다음과 같이 작성할 수 있습니다.
def is_str(v):
return isinstance(v, str)
print(is_str('string'))
# True
print(is_str(100))
# False
print(is_str([0, 1, 2]))
# False
def is_str_or_int(v):
return isinstance(v, (int, str))
print(is_str_or_int('string'))
# True
print(is_str_or_int(100))
# True
print(is_str_or_int([0, 1, 2]))
# False
def type_condition(v):
if isinstance(v, str):
print('type is str')
elif isinstance(v, int):
print('type is int')
else:
print('type is not str or int')
type_condition('string')
# type is str
type_condition(100)
# type is int
type_condition([0, 1, 2])
# type is not str or int
type()과 isinstance()의 차이점
type()과 isinstance()의 차이점은 isinstance()는 두 번째 인수로 지정된 클래스를 상속하는 하위 클래스의 인스턴스에 대해 true를 반환한다는 것입니다.
예를 들어 다음과 같은 슈퍼클래스(기본 클래스)와 서브클래스(파생 클래스)가 정의됩니다.
class Base:
pass
class Derive(Base):
pass
base = Base()
print(type(base))
# <class '__main__.Base'>
derive = Derive()
print(type(derive))
# <class '__main__.Derive'>
type()을 사용한 유형 결정은 유형이 일치하는 경우에만 true를 반환하지만 isinstance()는 슈퍼클래스의 경우에도 true를 반환합니다.
print(type(derive) is Derive)
# True
print(type(derive) is Base)
# False
print(isinstance(derive, Derive))
# True
print(isinstance(derive, Base))
# True
bool 유형(true,false)과 같은 표준 유형의 경우에도 주의해야 합니다. bool은 정수 유형의 하위 클래스이므로 isinstance()는 상속받은 int에 대해서도 true를 반환합니다.
print(type(True))
# <class 'bool'>
print(type(True) is bool)
# True
print(type(True) is int)
# False
print(isinstance(True, bool))
# True
print(isinstance(True, int))
# True
정확한 유형을 확인하려면 type()을 사용하십시오. 상속을 고려하여 유형을 결정하려면 isinstance()를 사용하십시오.
내장 함수 issubclass()도 제공되어 클래스가 다른 클래스의 하위 클래스인지 여부를 판별합니다.
print(issubclass(bool, int))
# True
print(issubclass(bool, float))
# False