TypeVar는 호출마다 정해지는 타입 자리라서 list[T] -> T처럼 관계를 보존해. bound는 어떤 상위 계약의 하위 타입으로, constraints는 열거한 타입 중 하나로 제한해. 클래스는 Generic[T]로 같은 관계를 필드와 메서드에 이어.
Self는 실제 호출한 클래스와 같은 타입을 돌려준다는 뜻이고, ParamSpec은 데코레이터가 원래 함수의 모든 인자 모양을 보존하게 해. TypeVar가 한 번만 나오면 관계를 설명하지 못하므로 구체 타입이나 Protocol이 나아.