有没有办法检查对象是否是类的实例?不是具体类的实例,而是任何类的实例。
我可以检查一个对象不是一个类,而不是一个模块,而不是一个追溯等,但我对一个简单的解决方案感兴趣。
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"
希望这可以帮助。
最近不得不处理类似的事情。
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
是。因此,您可以使用hasattr(obj, '__dict__')
或obj is not callable(obj)
。
你有没有尝试过内置功能的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
我有一个类似的问题,结果是为我工作:
def isclass(obj):
return isinstance(obj, type)
我觉得我在这个问题上已经相当晚了,事实上我正在努力解决同样的问题。所以这对我有用。
>>> 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上测试了这个。
告诉你想要什么有点难,但也许inspect.isclass(val)
正是你想要的?
要么
import inspect
inspect.isclass(myclass)
这是个烂摊子。
if str(type(this_object)) == "<type 'instance'>":
print "yes it is"
else:
print "no it isn't"