`reveal_type` の出力のアスタリスクは何を意味しますか? 質問する

`reveal_type` の出力のアスタリスクは何を意味しますか? 質問する
reveal_type(1) # Revealed type is 'builtins.int'
bla = [1,2,3]
reveal_type(bla[0]) # Revealed type is 'builtins.int*'
reveal_type(bla[0] * 2) # Revealed type is 'builtins.int'

intとの違いは何ですかint*?

ベストアンサー1

これは、型変数の置換を実行する一環として、特定の型が mypy によって推論されたことを意味します。

たとえば、blah[0]は実際には を実行しています。メソッドは 型 の値を返すように定義されており、 はリスト* 内に含まれる型であることがblah.__getitem__(0)わかります。__getitem___T_T

Mypy はblahに int が含まれていることを理解し、_T戻り値の型が 型であると推論しますint

1対照的に、とだけでは型変数の推論は行われませんblah[0] * 2。前者はリテラルであり、後者はint.__mul__(...)、具体的には int を返すように型指定されたメソッドを呼び出します。

*まあ、それは実際の正確な署名ではありませんが、十分近いものです。


ほとんどの場合、これを無視して、mypy の実装の詳細として扱うことができます。これが存在する主な理由は、型が推論されたかどうかを判断できることが、mypy の内部をいじったりデバッグしたりするときに時々役立つためです。

おすすめ記事