Type Annotation (Type Hint)
동적언어인 파이썬에서는 정적언어와 달리 변수 또는 함수에 type을 엄격하게 명시하지 않고 사용할 수 있어, 생산성이 뛰어난 장점이 있다. 그러나 type 이 명시적으로 보이지 않아, 다른 사람의 코드를 사용하거나 읽는데 있어 불폄함을 느낄 수 있다. 정적언어처럼 type 의 명시성을 높이기 위해 사용할 수 있는 것이 바로 Type Annotation 이다
기본 자료구조 1 (int, str, float, bool)
변수에 대해 type hint 명시는 간단하게, 변수명 오른쪽에 콜론과 함께 type 을 적어주면 된다.
int_var: int = 88
str_var: str = "hello world"
float_var: float = 88.9
bool_var: bool = True
한가지 주의할 것은, type hint 라는 제약 때문에 해당 변수값이 다른 자료형의 값으로 수정되어도 에러가 발생하지는 않는다. 따라서, 수월한 개발과 유지보수를 위해서는 type check을 위한 방어코드를 정의하는 것이 좋다. 이 때 사용할 수 있는 것이 isinstance(object, type)
이다. 조건문을 통해, 자료형이 다를 경우 예외발생을 유도할 수 있다 (type_check1
) . 만약 assert
까지 활용하면, 이를 한줄로 작성할 수 있다(type_check2
).
def type_check1(obj, type_class) -> None:
"""
<자료형 검사 수행>
object 가 type_class 가 아닐 경우, 메시지와 함께 TypeError 를 발생시킨다.
Ex. TypeError : obj should be {type_class}"
"""
if isinstance(obj, type_class):
pass
else:
raise TypeError(f"obj should be {type_class}")
def type_check2(obj, type_class) -> None:
"""
<자료형 검사 수행>
object 가 type_class 가 아닐 경우, 메시지와 함께 예외를 발생시킨다.
Ex. AssertionError: obj should be {type_class}
"""
assert isinstance(obj, type_class) f"obj should be {type_class}"
def cal_add(x: int, y: int) -> int:
type_check1(x, int)
type_check2(y, int)
return x + y
print(cal_add(1, 3)) # 4
print(cal_add('a', 1)) # TypeError
print(cal_add(1, 'a')) # AssertionError
Type Annotation (3) - Callable (0) | 2022.05.22 |
---|---|
Type Annotation (2) - 기본 자료구조 2 (List, Tuple, Dict, Set) (0) | 2022.05.21 |
__slot__ 을 활용한 객체 메모리 관리 (0) | 2022.05.21 |
Object Oriented Programming 원칙 (5) - 조합(composition) (0) | 2022.05.20 |
Object Oriented Programming 원칙 (4) - 다형성(polymorphism) (0) | 2022.05.20 |
댓글 영역