Javaでは、数値型はすべてNumberから派生しているため、
(x instanceof Number).
同等のpythonは何ですか?
最新のPythonバージョン(2.6以降。古いバージョンでは、いくつかのハードコードされた型のチェックにほとんど制限されています)の正しい方法は、変数が numbers.Number
のインスタンスであるかどうかをテストすることです。
>>> import numbers
>>> import decimal
>>> [isinstance(x, numbers.Number) for x in (0, 0.0, 0j, decimal.Decimal(0))]
[True, True, True, True]
これは ABCs を使用し、すべての組み込みの数値クラスと、ソルトに値するすべてのサードパーティクラス(Number
ABCのサブクラスとして登録されている場合)でも機能します。ただし、多くの場合、手動で型指定されたチェックを心配する必要はありません-Pythonはアヒル型であり、通常互換性のある型の混合が通常機能しますが、一部の操作が意味をなさない場合(4 - "1"
)これはほとんど必要ありません。それは単なるボーナスです。このモジュールを終了するときに追加して、実装の詳細で他の人を悩ませないようにすることができます。
私はこれがうまくいくと思う:
isinstance(x, (int, long, float, complex))
Number
モジュールのnumbers
を使用して、isinstance(n, Number)
をテストします(2.6以降で使用可能)。
isinstance(n, numbers.Number)
ここでは、さまざまな種類の番号と1つの非番号で動作しています。
>>> from numbers import Number
... from decimal import Decimal
... from fractions import Fraction
... for n in [2, 2.0, Decimal('2.0'), complex(2,0), Fraction(2,1), '2']:
... print '%15s %s' % (n.__repr__(), isinstance(n, Number))
2 True
2.0 True
Decimal('2.0') True
(2+0j) True
Fraction(2, 1) True
'2' False
もちろん、これはアヒルのタイピングに反しています。オブジェクトが何であるかではなく、どのように動作するかをもっと気にする場合は、番号があるかのように操作を実行し、例外を使用してそうでないことを伝えます。
isinstance
を使用できますが、これはPythonの動作ではないことに注意してください。 Pythonはアヒル型言語です。タイプを明示的にチェックしないでください。誤った型が渡された場合、TypeError
が発生します。
したがって、それがint
であると仮定してください。気にしないでください。
それは実際にはpythonの仕組みではありません。数字と同じように使用してください。数字ではないものを誰かが渡すと失敗します。正しい型を渡すのはプログラマーの責任です。