python-type-safety은(는) 무엇을 하나요?
Python 타입 힌트, 제네릭, 프로토콜 및 엄격한 타입 검사를 통한 Python 타입 안전성. 타입 주석 추가, 제네릭 클래스 구현, 구조적 인터페이스 정의, mypy/pyright 구성 시 사용하세요.
개요
이 스킬은 Python 코드에서 타입 안전성을 적용하는 방법을 제공합니다. 다음을 포함합니다:
- 타입 힌트: 함수 매개변수, 반환값, 변수에 타입 주석 추가
- 제네릭:
TypeVar,Generic을 사용한 재사용 가능한 타입 안전 클래스 및 함수 - 프로토콜: Python의 구조적 서브타이핑을 위한
Protocol클래스 - 정적 타입 검사: mypy 및 pyright용 엄격한 구성
사용법
다음은 일반적인 사용 예시입니다:
from typing import Generic, TypeVar, Protocol, List, Optional
T = TypeVar('T')
class Comparable(Protocol):
def __lt__(self, other: 'Comparable') -> bool: ...
class Stack(Generic[T]):
def __init__(self) -> None:
self._items: List[T] = []
def push(self, item: T) -> None:
self._items.append(item)
def pop(self) -> Optional[T]:
return self._items.pop() if self._items else None
def peek(self) -> Optional[T]:
return self._items[-1] if self._items else None
정적 타입 검사 구성
mypy 설정 (mypy.ini)
[mypy]
strict = True
disallow_untyped_defs = True
check_untyped_defs = True
warn_return_any = True
warn_unused_configs = True
disallow_any_generics = True
disallow_subclassing_any = True
pyright 설정 (pyproject.toml)
[tool.pyright]
typeCheckingMode = "strict"
reportMissingTypeStubs = false
reportUnknownMemberType = true
reportUnknownVariableType = true
모범 사례
- 항상 엄격한 모드 사용: 타입 오류를 조기에 발견하려면
strict=True로 mypy나 pyright를 구성하세요. - 제네릭 선호: 구체적인 타입 대신 제네릭을 사용하여 코드 재사용성을 높이세요.
- 프로토콜로 인터페이스 정의: 추상 기본 클래스(ABC)보다 프로토콜을 사용하여 덕 타이핑을 유지하면서도 타입 안전성을 확보하세요.
Optional과Union활용:None이 가능한 값이나 여러 타입을 명시적으로 처리하세요.- 타입 별칭 사용: 복잡한 타입은 가독성을 위해
TypeAlias로 정의하세요.
참고 사항
- 이 스킬은 Python 3.10+를 권장하지만, 3.8+에서도
from __future__ import annotations로 사용할 수 있습니다. - 타입 힌트는 런타임 성능에 영향을 주지 않으며, 정적 분석에만 사용됩니다.
- 프로토콜은
@runtime_checkable데코레이터로 런타임 검사가 가능하지만, 필요할 때만 사용하세요.