要确定类别,我可以这样做:
class A: pass
a = A
type(A) is type #True
或:
import inspect
inspect.isclass(A)
但是如何在不知道类名的情况下判断类实例的类型呢?
像这样:
isinstance(a, a.__class__.__name__)
#TypeError: isinstance() arg 2 must be a type or tuple of types
我找到了一种解决方案,但它不适用于 Python 3x
import types
class A: pass
a = A()
print(type(a) == types.InstanceType)
#AttributeError: 'module' object has no attribute 'InstanceType'
解决方案:
if '__dict__' in dir(a) and type(a) is not type:
最佳答案
你的问题有点不清楚。您想要确定“类实例的类型”。这可能意味着两件事。要么你想确定是一个实例,要么是一个特定类的实例。你可以这样做:
>>> isinstance(a, A)
True
您也可以通过调用 type()
获取类,但这通常不是很有用:
>>> type(a)
<class '__main__.A'>
但是您显示的测试并没有检查这一点。相反,他们检查类 是什么类型。但是 Python 3 只有一种类型的类。 Python 2 以及“旧式”和“新式”类,但 Python 3 只有新式类,因此无需在 Python 3 中进行此类检查。
您还可以使用元类。在这种情况下,您可以通过检查类的 __class__
找到元类:
>>> from abc import ABCMeta
>>> class B(metaclass=ABCMeta): pass
>>> type(B)
<class 'abc.ABCMeta'>
然而,从您的评论来看,您似乎想要确定一个对象是否是一个实例。如果你这样问,你会得到更好的答案......
无论如何,要做到这一点,您可以使用 inspect.isclass
:
>>> import inspect
>>> inspect.isclass(a)
False
>>> inspect.isclass(A)
True
这是因为一切都是实例:
>>> isinstance(type, type)
True
但并不是所有的东西都是一个类。
关于python - 如何判断类实例的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548936/