Python 检查类的实例

148 投票
12 回答
187957 浏览
提问于 2025-04-17 13:50

有没有什么方法可以检查一个对象是否是某个类的实例?不是说它是某个具体类的实例,而是说它是否是任何类的实例。

我可以检查一个对象不是类、不是模块、不是错误追踪等等,但我想要一个简单的解决办法。

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"

撰写回答