オブジェクトがクラスのインスタンスであるかどうかを確認する方法はありますか?具象クラスのインスタンスではなく、任意のクラスのインスタンス。
オブジェクトがクラス、モジュール、トレースバックなどではないことを確認できますが、簡単な解決策に興味があります。
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"
お役に立てれば。
isinstance()
組み込み関数を試しましたか?
また、hasattr(obj, '__class__')
を見て、オブジェクトが特定のクラスタイプからインスタンス化されたかどうかを確認することもできます。
遅刻だ。とにかくこれはうまくいくと思う。
is_class = hasattr(obj, '__name__')
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
私はこれにかなり遅れていると思います、そして、事実は同じ問題で苦労していました。だからここに私のために働いたものがあります。
>>> 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の両方でテストしました。
私がこれでうまくいくことが判明したので、私は同様の問題を抱えていました:
def isclass(obj):
return isinstance(obj, type)
これがダートトリックです。
if str(type(this_object)) == "<type 'instance'>":
print "yes it is"
else:
print "no it isn't"
あなたが望むものを伝えるのは少し難しいですが、おそらくinspect.isclass(val)
があなたが探しているものですか?
または
import inspect
inspect.isclass(myclass)
はい。したがって、hasattr(obj, '__dict__')
またはobj is not callable(obj)
を使用できます。
最近似たようなものに対処する必要がありました。
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