Python 检查类的实例
有没有什么方法可以检查一个对象是否是某个类的实例?不是说它是某个具体类的实例,而是说它是否是任何类的实例。
我可以检查一个对象不是类、不是模块、不是错误追踪等等,但我想要一个简单的解决办法。
12 个回答
13
如果你想确认一个对象是自己定义的类的实例,而不是某个内置类型的实例,你可以检查它是否有 __dict__
这个属性。
>>> 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
>>>
如果你想检查一个实例是否是任何类的对象,不管是自己定义的还是内置的,你可以简单地检查它是否是 object
的实例,因为在Python中,object
是所有类的最终基类。
class A:
pass
a = A()
isinstance(a, object)
True
isinstance(4, object)
True
isinstance("hello", object)
True
isinstance((1,), object)
True
33
你有没有试过使用isinstance()
这个内置函数?
你还可以看看hasattr(obj, '__class__')
,这样可以判断这个对象是不是从某个类创建的。
165
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"