web-dev-qa-db-ja.com

Pythonクラスのインスタンスをチェック

オブジェクトがクラスのインスタンスであるかどうかを確認する方法はありますか?具象クラスのインスタンスではなく、任意のクラスのインスタンス。

オブジェクトがクラス、モジュール、トレースバックなどではないことを確認できますが、簡単な解決策に興味があります。

61
exbluesbreaker

isinstance()はあなたの友達です。ブール値を返し、型を確認するために次の方法で使用できます。

if isinstance(obj, (int, long, float, complex)):
    print obj, "is a built-in number type"

if isinstance(obj, MyClass):
    print obj, "is of type MyClass"

お役に立てれば。

75
Matt Alcock

isinstance() 組み込み関数を試しましたか?

また、hasattr(obj, '__class__')を見て、オブジェクトが特定のクラスタイプからインスタンス化されたかどうかを確認することもできます。

20
Ber

遅刻だ。とにかくこれはうまくいくと思う。

is_class = hasattr(obj, '__name__')
5
ellethee
class test(object): pass
type(test)

返却値

<type 'type'>

instance = test()
type(instance)

返却値

<class '__main__.test'>

それが彼らを区別する一つの方法です。

def is_instance(obj):
    import inspect, types
    if not hasattr(obj, '__dict__'):
        return False
    if inspect.isroutine(obj): 
        return False
    if type(obj) == types.TypeType: # alternatively inspect.isclass(obj)
        # class type
        return False
    else:
        return True
4
user2682863

私はこれにかなり遅れていると思います、そして、事実は同じ問題で苦労していました。だからここに私のために働いたものがあります。

>>> class A:
...     pass
... 
>>> obj = A()
>>> hasattr(obj, '__dict__')
True
>>> hasattr((1,2), '__dict__')
False
>>> hasattr(['a', 'b', 1], '__dict__')
False
>>> hasattr({'a':1, 'b':2}, '__dict__')
False
>>> hasattr({'a', 'b'}, '__dict__')
False
>>> hasattr(2, '__dict__')
False
>>> hasattr('hello', '__dict__')
False
>>> hasattr(2.5, '__dict__')
False
>>> 

これをpython 3と2.7の両方でテストしました。

3
Rohit

私がこれでうまくいくことが判明したので、私は同様の問題を抱えていました:

def isclass(obj):
    return isinstance(obj, type)
2
N.C. van Gilse

これがダートトリックです。

if str(type(this_object)) == "<type 'instance'>":
    print "yes it is"
else:
    print "no it isn't"
1
f.rodrigues

あなたが望むものを伝えるのは少し難しいですが、おそらくinspect.isclass(val)があなたが探しているものですか?

1
Ned Batchelder

または

import inspect
inspect.isclass(myclass)
1
Farsheed

はい。したがって、hasattr(obj, '__dict__')またはobj is not callable(obj)を使用できます。

0
seaky

最近似たようなものに対処する必要がありました。

import inspect

class A:
    pass

def func():
    pass

instance_a = A()

def is_object(obj):
     return inspect.isclass(type(obj)) and not type(obj) == type

is_object(A)          # False
is_object(func)       # False
is_object(instance_a) # True
0
Ben Hoff