Python에서 데이터 유형을 확인하는 방법(유형 및 isinstance)
Python에서 데이터 유형을 확인하는 방법을 알아보세요. type()과 isinstance()를 언제 사용해야 하는지 이해하고, 사용자 정의 클래스를 처리하고, 안전한 유형 검사 유효성 검사를 작성하세요.
개요
Python은 동적으로 유형이 지정되는 언어입니다. 즉, 변수는 모든 데이터 유형의 값을 보유할 수 있으며 해당 유형은 실행 중에 변경될 수 있습니다. 이러한 유연성으로 인해 초기 개발 속도가 빨라지지만, 정수에 대한 산술 수행이나 문자열 메서드 호출과 같은 유형별 작업을 실행하기 전에 런타임에 변수 유형을 확인해야 합니다.
객체의 데이터 유형을 확인하기 위해 Python은 `type()`과 `isinstance()`라는 두 가지 기본 함수를 제공합니다. `type(obj)` 함수는 객체의 정확한 클래스 유형을 반환합니다. 숫자가 정수인지 확인하기 위해 `type(obj) == int`를 사용할 수 있지만 이 방법은 상속 구조를 지원하지 않기 때문에 일반적으로 권장되지 않습니다(정수의 하위 클래스는 `False`로 평가됩니다).
유형을 확인하는 데 권장되는 Python 방식은 'isinstance(obj, class_info)'입니다. 이 함수는 객체가 지정된 클래스의 인스턴스인지 또는 그 클래스에서 상속된 하위 클래스인지 확인합니다. 또한 클래스 튜플(예: `isinstance(value, (int, float))`)에 대한 검사를 지원하여 유효성 검사 코드를 매우 유연하고 강력하게 만듭니다.
코드 및 실행 출력
이 스크립트는 type()과 isinstance()를 모두 사용하여 변수 유형을 확인하고 상속의 차이점을 보여주는 방법을 보여줍니다.
value_int = 42
value_str = "hello"
# 1. Checking type using isinstance() (Recommended)
is_number = isinstance(value_int, int)
print(f"Is {value_int} an int? {is_number}")
# Checking against multiple possible types
is_num_or_str = isinstance(value_str, (int, float, str))
print(f"Is '{value_str}' int, float, or str? {is_num_or_str}")
# 2. Checking type using type() (For exact class matches)
print(f"Exact type of value_int: {type(value_int).__name__}")
print("Is value_int exactly an int?", type(value_int) is int)
# 3. Inheritance difference
class CustomList(list):
pass
my_list = CustomList([1, 2, 3])
print("\nInheritance testing:")
print("isinstance(my_list, list):", isinstance(my_list, list))
print("type(my_list) is list:", type(my_list) is list)Is 42 an int? True
Is 'hello' int, float, or str? True
Exact type of value_int: int
Is value_int exactly an int? True
Inheritance testing:
isinstance(my_list, list): True
type(my_list) is list: False단계별 구현
- 일반적인 유형 검사(상속 준수)에는 isinstance(variable, type_name)를 사용하십시오.
- isinstance(variable, (int, float))와 같은 유형의 튜플을 전달하여 여러 클래스를 확인합니다.
- 하위 클래스를 무시하고 정확한 클래스 일치를 보장해야 하는 경우에만 type(variable) is type_name을 사용하세요.
자주 묻는 질문
type()보다 isinstance()가 선호되는 이유는 무엇입니까?
isinstance()는 객체 상속과 다형성을 지원합니다. 내장 유형을 하위 클래스로 분류하면 isinstance()는 이를 상위 클래스의 인스턴스로 올바르게 인식하는 반면 type()은 False로 평가됩니다.
객체가 함수처럼 호출 가능한지 어떻게 확인할 수 있나요?
객체를 함수처럼 호출할 수 있으면 True를 반환하는 내장 callable() 함수를 사용하세요.
관련 주제
권장 Python 리소스
관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.
Python 유형 힌트
Python에서 유형 힌트를 작성하는 방법을 알아보세요. 코드 품질을 개선하고, 자동 완성을 활성화하고, 정적 코드 분석을 위해 mypy를 활용하세요.
Python 유형 변환 치트 시트
Python에서 암시적 및 명시적 유형 변환을 알아보세요. 문자열, 정수, 부동 소수점, 목록, 집합 및 사전 간을 변환합니다.
Python 대 TypeScript: 동적 스크립팅 대 Type-Safe 웹
Python과 TypeScript를 비교해보세요. 구조적 유형 시스템, 데코레이터 메타데이터, 컴파일러 검사, 웹 런타임 및 개발자 도구에 대해 알아보세요.