프로그래밍/python

python 3.10 type hint / annotation

인썸니아 2023. 9. 3. 14:58

기본적으로 동적 프로그램 언어인 파이썬에서는 명시적으로 type을 지정하지 않고 실행중에 추론하여 처리하게 되는데, 이로인해 코드 규모가 커질 경우 가독성이 떨어지는 단점이 있다. 개인적으로도, 다른 사람이 작성한 코드를 분석해야 할 경우에 불편함이 상당했다.

 

python 3.5 버전부터 type hint 가 지원되어 코드 가독성에 도움을 줄 수 있게 되었고, typing 모듈을 import하여 type hint 를 다양하게 설정할 수 있었다.

 

python 3.10 버전부터는 typing 모듈 사용없이 좀더 간결한 방법을 사용할 수 있는데, 아래와 같이 or 연산자 사용이 가능하다.

# arg1의 type은 int 또는 None
# return type은 int 또는 None 요소를 포함하는 list
def function1(arg1: int | None = 10) -> list[int | None]:
    print(type(arg1)
    return [1, 2, 3]

 

가독성에도 도움을 줄 뿐만 아니라, pycharm 과 같은 IDE 사용시 정적으로 type을 체크하여 확인이 가능하게 되어 편리하다.

 

하지만, type hint 는 말그대로 힌트이며, 명시한 type 에 상관없이 코드는 실행된다. 가독성에 도움이 되고 IDE 를 통한 활용이 가능한 것이지 type 사용의 제약을 강요하지 않는다.

 

__annotations__ 키워드를 통해 annotation을 확인할 수 있다.

>>> function1.__annotations__
{'arg1': int | None, 'return': list[int | None]}

 

저걸 활용하면 코드 내에서 type check를 할 수 있도록 구현해 볼 수는 있겠다.

>>> types = function1.__annotations__
>>> types['arg1'].__args__
(<class 'int'>, <class 'NoneType'>)
>>> int in types['arg1'].__args__
True

 

 

반응형