오늘은 타입 힌팅 / 어노테이션에 대해 포스팅 해보려고 한다.
파이썬은 기본적으로 동적 타입 언어이다.
변수의 타입을 코드 상에 지정해주는 것이 아니라 실행될 때 자료형이 정해진다. 때문에 정수가 할당되었던 변수에 문자열이 할당되는 등의 동작이 가능한 것이다.
이러한 특징은 코드를 간결하게 해주고 간단한 프로그램 작성 시 개발 속도를 높여준다.
하지만 프로그램 규모가 커지게 되면 타입에 대한 버그가 생겨 날 수 있어 최근에는 타입 힌트를 많이 이용하는 추세이다.
파이썬 3.5버전에 추가된 타입 힌팅은 말그대로 타입에 대한 힌트를 주는 것이다.
강제성이 아니고 변수가 어떤 타입인지만 알려주는 것이기 때문에 잘못된 타입이 들어와도 에러가 발생하지 않는다.
[1] num: int = 1
[2] my_list: list = ['a', 'b', 'c']
[3] my_dict: dict = {1: 'kim', 2: 'lee'}
[4] def func(a:str, b:str = 'default') -> list:
...
[1]: 정수형의 num
[2]: list형의 my_list
[3]: dictionary형의 my_dict
[4]: 문자열 a,b를 인자로 받는 함수. b의 디폴트 값은 'default' 이며 함수의 반환값은 list
파이썬에서 제공하는 typing 모듈을 사용하면 보다 구체적으로 타입 힌트를 작성할 수 있다.
from typing import List, Set, Dict, Tuple
nums_list:List[int] = [1, 2, 3]
nums_set:Set[int] = [1, 2, 3]
students:Dict[int, str] = {1: 'kim', 2: 'lee'}
student:Tuple[int, str, List[float]] = (19, 'kim', [178.1])
annotations를 이용하면 작성해준 어노테이션들을 확인할 수 있다.
>>>class Student:
... name: str
... age: int
... score: dict
...
... def set_name(name: str):
... self.name = name
...
... def get_name() -> str:
... return self.name
...
>>> student = Student()
>>> student.__annotations__
{'name': <class 'str'>, 'age': <class 'int'>, 'score': <class 'dict'>}
>>> student.set_name.__annotations__
{'name': <class 'str'>}
>>> student.get_name.__annotations__
{'return': <class 'str'>}
참고: 파이썬 타입 어노테이션/힌트