Python 如何识别变量是类还是对象

Python 如何识别变量是类还是对象,python,Python,我正在编写一个小框架,用于用Python为我的项目创建测试装置,这是一个较低级别的工作。在本文中,我想知道某个特定变量是某个类的实例还是某个类本身,如果它是一个类,我想知道它是否是我的框架定义的某个类的子类。我该怎么做 class MyBase(object): pass class A(MyBase): a1 = 'Val1' a2 = 'Val2' class B(MyBase): a1 = 'Val3' a2 = A 我想知道属性a1和a2是类

我正在编写一个小框架,用于用Python为我的项目创建测试装置,这是一个较低级别的工作。在本文中,我想知道某个特定变量是某个类的实例还是某个类本身,如果它是一个类,我想知道它是否是我的框架定义的某个类的子类。我该怎么做

class MyBase(object):
    pass

class A(MyBase):
    a1 = 'Val1'
    a2 = 'Val2'

class B(MyBase):
    a1 = 'Val3'
    a2 = A
我想知道属性a1和a2是类/类型的实例(a1在B中是字符串类型)还是类对象本身(即a2在B中是a)。你能帮我怎么找到这个吗?

使用
type()
函数。它将返回对象的类型。您可以从库中获取要匹配的“库存”类型。旧式类(不从任何东西继承)的类型为
types.ClassType
。您的示例中的新样式类具有类型
types.TypeType
。这个模块中还有很多其他有用的字符串类型


在旧式类的实例上调用
type()
将返回
types.InstanceType
。在新样式类的实例上调用它将返回类本身。

使用
isinstance
type
types.ClassType
(后者用于旧样式类):

使用类型()

>A类:合格
>>>打印类型(A)
>>>A=“abc”
>>>打印类型(A)
使用

inspect模块提供了几个有用的函数来帮助获取有关活动对象的信息,例如模块、类、方法、函数、回溯、帧对象和代码对象。例如,它可以帮助您检查类的内容、检索方法的源代码、提取函数的参数列表并设置其格式,或者获取显示详细回溯所需的所有信息

例如,如果对象是类,则函数返回true:

>>> import inspect
>>> inspect.isclass(inspect)
False
>>> inspect.isclass(inspect.ArgInfo)
True
>>> 

+我不知道这一点,比
isinstance
alternativesThanks好多了。我也不知道这件事。这对我很有帮助。我使用的是Inklespen和abyx给出的解决方案。谢谢大家提供的解决方案为什么你不能阅读源代码?你的消息来源怎么了?这是什么意思?你的意思是我应该阅读源代码,解析并找出答案?我希望在运行时以编程和动态方式找到答案。如何通过阅读源代码来实现这一点?
>>> class A: pass
>>> print type(A)
<type 'classobj'>
>>> A = "abc"
>>> print type(A)
<type 'str'>
>>> import inspect
>>> inspect.isclass(inspect)
False
>>> inspect.isclass(inspect.ArgInfo)
True
>>>