python - 如何判断类实例的类型

标签 python python-3.x

要确定类别,我可以这样做:

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/

相关文章:

python - 比较 pandas groupby 中的最后一个值

python - 在文件上传的情况下,django form.is_valid() 始终返回 0

Python pandas str.extract 从多列中提取

python - 使用 Python 更新文件

python - 打开已声明为 .mo 扩展名的 .txt 文件

python - 制作一副牌,在 1 次迭代后不可调用

python - 融化 Pandas 数据框

用于读/写的 Python 3.3 Pickle 错误

python - ModuleNotFoundError : No module named 'tf_slim'

python - 比较多个抛硬币实验。 1 次实验 = 100 次翻转。尝试模拟 10 个实验