Pythonの型ヒントにはTypeVar
という機能があります。これは、特定の型を表すために使用する型変数です。例えば、引数をそのまま返す関数の定義に使用できます。
from typing import TypeVar
T = TypeVar("T")
def get_t_arg(arg: T) -> T:
return arg
上記のget_t_arg(arg: T) -> T
の型ヒントは、「引数arg
の型がT
であるとき、返り値の型がT
である」ことを意味します。
しかし、TypeVar
を使ってisinstance
を使う方法は少し複雑です。以下に一例を示します。
from typing import TypeVar, Generic, Any
T = TypeVar('T')
class MyTypeChecker(Generic[T]):
def is_right_type(self, x: Any):
return isinstance(x, self.__orig_class__.__args__[0]) # type: ignore
a = MyTypeChecker[int]()
b = MyTypeChecker[str]()
print(a.is_right_type(1)) # True
print(b.is_right_type(1)) # False
print(a.is_right_type('str')) # False
print(b.is_right_type('str')) # True
このコードでは、MyTypeChecker
クラスがTypeVar
を使用しています。このクラスのis_right_type
メソッドは、引数x
が指定した型(int
やstr
など)であるかどうかをチェックします。
このように、PythonのTypeVar
とisinstance
を組み合わせて使用することで、より柔軟な型チェックが可能になります。