8

オブジェクトがクラスオブジェクトであるかどうかをPythonで確認することは可能ですか? 持っている場合はIE

class Foo(object):
    pass

o が Foo (または他のクラス) であるか、Foo のインスタンス (または他のクラス インスタンス) であるかをどのように確認できますか? Java では、これは簡単なことです。オブジェクトが Class のインスタンスであるかどうかを確認するだけです。Pythonに似たようなものがありますか、それとも気にしないことになっていますか?

若干の説明: 指定されたパラメーターに関する情報を出力する関数を作成しようとしています。したがって、o (o = Foo()) を渡すと、Foo に関する情報が出力されます。Foo を渡すと、まったく同じ情報が出力されます。タイプに関する情報ではありません。

4

4 に答える 4

9

isinstance組み込み関数を使用します。

>>> o = Foo()
>>> isinstance(o, Foo)
True
>>> isinstance(13, Foo)
False

これはサブクラスでも機能します。

>>> class Bar(Foo): pass

>>> b = Bar()
>>> isinstance(b, Foo)
True
>>> isinstance(b, Bar)
True

はい、通常、オブジェクトのタイプを特に気にする必要はありません。代わりに、必要なメソッドを呼び出すだけで、oユーザーがインターフェイスに準拠する任意のオブジェクトをプラグインできるようになります。使用しているオブジェクトのタイプを積極的にチェックする場合、これは不可能です。この原則はダック タイピングと呼ばれ、コードの記述方法をより自由に選択できます。

ただし、Python は実用的isinstanceであるため、特定のプログラムに適している場合は自由に使用してください。

編集:

一部の変数がクラスかインスタンスかを確認するには、次のようにします。

>>> isinstance(Foo, type)   # returns true if the variable is a type.
True
>>> isinstance(o, type)
False
于 2013-08-28T22:55:20.260 に答える
0

私はタナトスが言ったようにし、isinstance(Foo, type) をチェックしなければなりませんでしたが、古いクラス型の場合は isinstance(Foo, types.ClassType) もしなければなりません

于 2013-08-28T23:15:16.573 に答える
0

isinstance() 関数

isinstance(o, Foo)

また、それを使用して比較することもできoますobject

In [18]: class Foo(object): pass

In [20]: o_instance = Foo()

In [21]: o_class = Foo

In [22]: isinstance(o_instance, Foo)
Out[22]: True

In [23]: isinstance(o_class, Foo)
Out[23]: False

In [24]: isinstance(o_instance, object)
Out[24]: True

In [25]: isinstance(o_class, object)
Out[25]: True
于 2013-08-28T22:55:42.413 に答える