109

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

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

4

12 に答える 12

125

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"

お役に立てれば。

于 2013-01-27T20:21:32.207 に答える
30

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

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

于 2013-01-27T16:27:58.443 に答える
8

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

def isclass(obj):
    return isinstance(obj, type)
于 2018-06-19T11:39:02.190 に答える
6

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

is_class = hasattr(obj, '__name__')
于 2014-03-17T10:12:05.397 に答える
5
class test(object): pass
type(test)

戻り値

<type 'type'>

instance = test()
type(instance)

戻り値

<class '__main__.test'>

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

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
于 2013-08-30T16:24:27.280 に答える
3

また

import inspect
inspect.isclass(myclass)
于 2014-08-19T09:32:15.963 に答える
2

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

于 2013-01-27T17:15:19.380 に答える
2

ここに汚れのトリックがあります。

if str(type(this_object)) == "<type 'instance'>":
    print "yes it is"
else:
    print "no it isn't"
于 2014-12-09T04:07:07.960 に答える
0

最近似たようなものに対処しなければなりませんでした。

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
于 2015-10-25T04:00:23.037 に答える