9

オブジェクトがクラスのリスト/グループ内の任意のクラスのインスタンスであるかどうかを確認したいのですが、それを行わずにそうする Pythonic な方法があるかどうかさえわかりません。

if isinstance(obj, Class1) or isinstance(obj, Class2) ... or isinstance(obj, ClassN):
    # proceed with some logic

つまり、クラスごとに比較します。

isinstancen 個のクラスを受け取り、それが存在する場合と比較するのと同様の関数を使用する可能性が高くなります。

よろしくお願いします。:)

4

3 に答える 3

31

クラスのタプルを isinstance の 2 番目の引数として渡すことができます。

>>> isinstance(u'hello', (basestring, str, unicode))
True

docstring を調べると、それもわかりますが ;)

>>> help(isinstance)
Help on built-in function isinstance in module __builtin__:

isinstance(...)
    isinstance(object, class-or-type-or-tuple) -> bool

    Return whether an object is an instance of a class or of a subclass thereof.
    With a type as second argument, return whether that is the object's type.
    The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for
    isinstance(x, A) or isinstance(x, B) or ... (etc.).
于 2012-05-05T01:45:42.913 に答える
2

isinstance(obj, (Class1, Class2, ..., ClassN))、またはisinstance(obj, BaseClass)それらが共通の祖先を持っている場合。

とはいえ、これを使用する前によく考える必要があります。このような明示的な型チェックは、コードの汎用性を損なう可能性があるため、ダック タイピングを捨てる理由が必要です。

于 2012-05-05T01:47:16.940 に答える