何も使用することができますジムFasarakis-ヒリアードによって示唆された
def return_type(f: Callable):
try:
return get_type_hints(f)['return']
except(KeyError, AttributeError):
return Any
def g() -> return_type(f):
UPDとして:私はまた、この機能の使用可能性を示して小さな機能を書かれていますそのような現在が存在し、the tracker for typingに問題があると思われるように計画されています。問題を作成し、これがどのように歓迎されているかを常に歓迎します。
現在、あなたのアプローチは(つまりタイプを割り当てます)トリックをし、私が紹介したいだけの変更ではなく、直接__annotations__
属性をつかむよりもtyping
からget_type_hints
を使用することです。 (それは辞書を返すので).get
と相まって、あまりにも、これを短くすることができます:もちろん機能から削除され、あなたがその気なら、単一のラインで使用することができます
def return_type(f):
return get_type_hints(f).get('return', Any)
def g() -> return_type(f):
。これはあなたができる動的タイプが割り当てられますので、」もちろん
def return_type(f):
try:
return get_type_hints(f).get('return', Any)
except TypeError:
return Any
:ランダムなオブジェクトの可能性がreturn_type
終了に供給されている場合は
、あなたはそれが提起TypeError
をキャッチし、あなたのデフォルトAny
を返却する必要があります静的な型チェッカーがそれを捕まえることを期待しているなら、そのための静的なヒントが必要です。
次のような意味です: 'def decltype(function):return function .__ annotations __ ['return']'? :) – cowbert
@cowbertはい、私はちょうど同様の例を追加しました:)実際には、私はこの種のもののための機能がないことを混乱しています、そして、私はこの態度に何かが間違っているのだろうかと思います。 –