`Python type()` 함수 [간단한 예제와 함께]

우리는 파이썬에서 type() 함수를 사용하여 특정 파이썬 객체의 유형을 확인합니다. 이 함수는 매우 간단하고 이해하기 쉽습니다. 그럼 문법에 대해 바로 알아보겠습니다.

파이썬 type() 함수의 문법

파이썬에는 많은 내장 함수가 있습니다. type() 함수는 객체의 유형을 얻는 데 사용됩니다.

파이썬 type() 함수의 문법은 다음과 같습니다:

type(object)

type(name, bases, dict)

type() 함수에 하나의 인수가 전달되면 객체의 유형을 반환합니다. 이 값은 object.__class__ 인스턴스 변수와 동일합니다.

세 개의 인수가 전달되면 새로운 유형 객체를 반환합니다. 이는 동적으로 클래스를 생성하는 데 사용됩니다.

  • “name” 문자열은 클래스 이름이 됩니다. 이는 클래스의 __name__ 속성과 동일합니다.
  • “bases” 튜플은 기본 클래스를 지정합니다. 이는 클래스의 __bases__ 속성과 동일합니다.
  • “dict” 사전은 클래스 본문을 생성하는 데 도움이 됩니다. 이는 클래스의 __dict__ 속성과 동일합니다.

Python에서 type() 함수의 예시

type() 함수의 사용 예시를 살펴보겠습니다.

1. Python 객체의 타입 찾기

x = 10
print(type(x))

s = 'abc'
print(type(s))

from collections import OrderedDict

od = OrderedDict()
print(type(od))

class Data:
    pass

d = Data()
print(type(d))

출력 결과:

<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>

type() 함수는 객체의 타입을 모듈 이름과 함께 반환합니다. 우리의 Python 스크립트에는 모듈이 없으므로, 모듈은 __main__이 됩니다.

2. Python 클래스에서 세부 정보 추출하기

다음과 같은 클래스가 있다고 가정해봅시다. 클래스, bases, dict, doc 속성을 사용하여 클래스에 대한 메타데이터를 추출해보겠습니다.

class Data:
    """Data Class"""
    d_id = 10


class SubData(Data):
    """SubData Class"""
    sd_id = 20

이러한 클래스의 일부 속성을 출력해보겠습니다.

print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)

print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)

출력 결과:

<class 'type'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
Data Class

<class 'type'>
(<class '__main__.Data'>,)
{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
SubData Class

type() 함수를 사용하여 비슷한 클래스를 생성할 수 있습니다.

Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})

print(Data1.__class__)
print(Data1.__bases__)
print(Data1.__dict__)
print(Data1.__doc__)

print(SubData1.__class__)
print(SubData1.__bases__)
print(SubData1.__dict__)
print(SubData1.__doc__)

출력 결과:

<class 'type'>
(<class 'object'>,)
{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
Data1 Class

<class 'type'>
(<class '__main__.Data1'>,)
{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
SubData1 Class

type() 함수를 사용하여 동적 클래스에서 함수를 생성할 수는 없다는 점에 유의해주세요.

type() 함수의 실제 사용 예

Python은 동적으로 타입이 지정되는 언어입니다. 따라서 인수의 타입을 알고 싶다면 type() 함수를 사용할 수 있습니다. 함수가 특정 타입의 객체에서만 작동하도록 하려면 isinstance() 함수를 사용하십시오.

예를 들어, 두 개의 정수에 대해 무언가를 계산하는 함수를 만들고 싶다고 가정해보겠습니다. 다음과 같이 구현할 수 있습니다.

def calculate(x, y, op='sum'):
    if not(isinstance(x, int) and isinstance(y, int)):
        print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
        raise TypeError('Incompatible types of arguments, must be integers')
    
    if op == 'difference':
        return x - y
    if op == 'multiply':
        return x * y
    # 기본값은 합계(sum)입니다.
    return x + y

입력 인수의 유효성을 검사하기 위해 isinstance() 함수를 사용합니다. 유효성 검사가 실패할 때 매개변수의 타입을 출력하기 위해 type() 함수를 사용합니다.

참고문헌

Source:
https://www.digitalocean.com/community/tutorials/python-type