Pythonジェネリクスによる受渡型の取得方法
Pythonのジェネリクスは強くないため、渡された型を直接取得することはできません。 Pythonの型アノテーションは主に静的型検査を行うために使用されており、実行時には実際の型情報は保持されません。
しかし、typingモジュールのTypeとTypeVarを使用すれば、型パラメータの受け渡しや取得を実現できます。TypeVarは汎用的な型パラメータを定義するために使用され、Typeは実際の型を取得するために使用されます。
以下に一例を示します。
from typing import Type, TypeVar
T = TypeVar('T')
def get_type(obj: T) -> Type[T]:
return type(obj)
# 传入不同类型的参数
print(get_type("Hello")) # <class 'str'>
print(get_type(10)) # <class 'int'>
print(get_type([1, 2, 3])) # <class 'list'>
上記の例では、get_type() 関数はジェネリクス型の引数 T を受け取り、引数 obj の実体を取得するために type() 関数を使用している。続いて現実の型 Type[T] を返している。
なお、typingモジュールのTypeとTypeVarは、静的型チェックに使用されるものであり、実行時には実際には型情報が存在しません。そのため、Typeでは実際の型の基本的な情報(例: <class ‘str’>、<class ‘int’>)しか取得できず、それ以上の詳細な型の情報は取得できません。