1. ホーム
  2. python

mypy, type hint: Union[float, int] -> Number型はあるのか?

2023-07-26 14:06:34

質問

mypyは本当に便利で、多くのバグをキャッチしてくれますが、"scientific"アプリケーションを書くとき、私はしばしばやってしまうのです。

def my_func(number: Union[float, int]):
    # Do something

number は、ユーザーの入力に応じてfloatまたはintになります。正式な方法はあるのでしょうか?

どのように解決するのですか?

使用方法 float のみ というように int はその型に暗示されているからです。

def my_func(number: float):

PEP 484 型のヒント は、特に次のように記述しています。

ユーザーにインポート番号を書くことを要求するのではなく、インポート番号の後に numbers.Float などと書かせるのではなく、この PEP はほとんど同じ効果のある簡単なショートカットを提案しています。 というアノテーションをつけることで、引数の型が float と注釈されている場合、型の引数は int は許容範囲内 同様に、complex型と注釈された引数は、floatまたはint型が許容されます。

(太字強調)です。

理想的なのは、やはり numbers.Real :

from numbers import Real

def my_func(number: Real):

を受け入れることになるので fractions.Fraction()decimal.Decimal() オブジェクトも含まれます。数ピラミッドは整数と浮動小数点数だけでなく、より広い範囲に及びます。

しかし、これらは現在 mypy を使って型チェックをする場合は Mypy #3186 .