変数が整数であるかどうかを確認するにはどうすればよいですか?
必要な場合は、次のようにします。
isinstance(, int)
ただし、Python 2.x を使用している場合には
isinstance(, (int, long))
typeを使ってはいけません。これはポリモーフィズムの柔軟性をすべて遮断してしまうので、Pythonではほとんど正解ではありません。例えば、intをサブクラス化した場合、新しいクラスはintとして登録されなければなりませんが、type` ではそれができません。
を使ってはいけません。これはポリモーフィズムの柔軟性をすべて遮断してしまうので、Pythonではほとんど正解ではありません。例えば、
をサブクラス化した場合、新しいクラスは
として登録されなければなりませんが、
class Spam(int): pass x = Spam(0) type(x) == int # False isinstance(x, int) # True
これは Python の強力なポリモーフィズムに準拠しています: int であることを強制するのではなく、int のように振る舞う任意のオブジェクトを許可するべきです。
int
しかし、古典的なPythonの考え方では、許可するよりも許してもらう方が簡単です。言い換えれば、x が整数であるかどうかをチェックするのではなく、整数であると仮定し、そうでない場合は例外の結果をキャッチします。
x
try: x += 1 except TypeError: ...
これは、特別に構築されたクラスを継承させることで、オブジェクトが持つべきプロパティ(加算、乗算、倍加など)を正確に登録できるものです。これは、必要かつ十分な属性を持つオブジェクトを正確に*許可するので、最良の解決策となりますが、使い方についてはドキュメントを読まなければなりません。
>>> isinstance(3, int) True
詳細はこちらをご覧ください。
これは int のような属性を探している場合には役に立たないことに注意してください。この場合、longもチェックしたほうがいいでしょう。
long
>>> isinstance(3L, (long, int)) True
Pythonのソースでは、配列/インデックス型に対するこの種のチェックを見たことがありますが、C言語以外では見られないと思います。
Token SO reply: 本当に型をチェックする必要があるのでしょうか?処理できない型を渡さないようにするか、潜在的なコード再利用者を出し抜こうとしないようにしましょう。
関連質問](https://stackoverflow.com/questions/402504/how-to-determine-the-variable-type-in-python)をSO自体で見つけました。
Pythonの開発者は、型をチェックせずに、型固有の操作を行い、TypeErrorという例外をキャッチすることを好みます。しかし、型がわからない場合は以下のようになります。
TypeError
>>> i = 12345 >>> type(i) >>> type(i) is int True
必要な場合は、次のようにします。
ただし、Python 2.x を使用している場合には
type
を使ってはいけません。これはポリモーフィズムの柔軟性をすべて遮断してしまうので、Pythonではほとんど正解ではありません。例えば、
intをサブクラス化した場合、新しいクラスは
intとして登録されなければなりませんが、
type` ではそれができません。これは Python の強力なポリモーフィズムに準拠しています:
int
であることを強制するのではなく、int
のように振る舞う任意のオブジェクトを許可するべきです。BUT
しかし、古典的なPythonの考え方では、許可するよりも許してもらう方が簡単です。言い換えれば、
x
が整数であるかどうかをチェックするのではなく、整数であると仮定し、そうでない場合は例外の結果をキャッチします。これは、特別に構築されたクラスを継承させることで、オブジェクトが持つべきプロパティ(加算、乗算、倍加など)を正確に登録できるものです。これは、必要かつ十分な属性を持つオブジェクトを正確に*許可するので、最良の解決策となりますが、使い方についてはドキュメントを読まなければなりません。
詳細はこちらをご覧ください。
これは
int
のような属性を探している場合には役に立たないことに注意してください。この場合、long
もチェックしたほうがいいでしょう。Pythonのソースでは、配列/インデックス型に対するこの種のチェックを見たことがありますが、C言語以外では見られないと思います。
Token SO reply: 本当に型をチェックする必要があるのでしょうか?処理できない型を渡さないようにするか、潜在的なコード再利用者を出し抜こうとしないようにしましょう。
関連質問](https://stackoverflow.com/questions/402504/how-to-determine-the-variable-type-in-python)をSO自体で見つけました。
Pythonの開発者は、型をチェックせずに、型固有の操作を行い、
TypeError
という例外をキャッチすることを好みます。しかし、型がわからない場合は以下のようになります。