type(), isinstance() Python에서 유형을 가져오고 결정

사업

Python에서 내장 함수 type() 및 isinstance()는 변수와 같은 객체의 유형을 가져오고 확인하고 특정 유형인지 여부를 확인하는 데 사용됩니다.

다음 내용은 샘플 코드와 함께 여기에 설명되어 있습니다.

  • 객체 유형 획득 및 확인: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
Copied title and URL