Example:
from typen import enforce_type_hints
from typing import Generic, TypeVar
ModelT = TypeVar("ModelT")
class Test(Generic[ModelT]):
def __init__(self, val:ModelT):
self.val = val
@enforce_type_hints
def update(self, val:ModelT):
self.val = val
@enforce_type_hints
def get(self) -> ModelT:
return self.val
t=Test('foo')
t.update('bar') # Raises "ParameterTypeError: The 'val' parameter of 'update' must be ~ModelT, but a value of 'bar' <class 'str'> was specified."
t.get() # Raises "ReturnTypeError: The return type of 'get' must be ~ModelT, but a value of 'foo' <class 'str'> was returned."
Example: