如何判断一个变量是类还是对象
我正在做一个小项目,想要写一个框架来创建测试用例,使用的是Python。在这个过程中,我想知道一个特定的变量是不是某个类的实例,或者它本身是不是一个类。如果它是一个类,我还想确认它是否是我框架中定义的某个类的子类。我该怎么做呢?
class MyBase(object):
pass
class A(MyBase):
a1 = 'Val1'
a2 = 'Val2'
class B(MyBase):
a1 = 'Val3'
a2 = A
我想知道属性a1和a2是否是某个类或类型的实例(比如a1在B中是字符串类型),或者a2本身是否是类对象(也就是说a2是B中的A)。你能帮我看看我该怎么判断吗?
4 个回答
3
使用 type()
这个函数。它会告诉你一个对象的类型。你可以从 types 库中找到一些常见的类型来对照。老式类(那些没有继承任何东西的类)属于 types.ClassType
类型。而像你例子中的新式类则属于 types.TypeType
类型。这个模块里还有很多其他有用的类型,比如字符串等。
如果你在一个老式类的实例上调用 type()
,它会返回 types.InstanceType
。而在一个新式类的实例上调用它,则会返回这个类本身。
4
使用 isinstance
和 type
,还有 types.ClassType
(后者是用于旧式类的):
>>> isinstance(int, type)
True
>>> isinstance(1, type)
False
11
可以使用 inspect 模块。
inspect 模块提供了几个很有用的功能,可以帮助你获取关于活跃对象的信息,比如模块、类、方法、函数、错误追踪、帧对象和代码对象等。例如,它可以帮助你查看一个类的内容,获取一个方法的源代码,提取并格式化一个函数的参数列表,或者获取你需要的所有信息来显示详细的错误追踪。
举个例子,inspect.isclass()
这个函数如果对象是一个类,就会返回真:
>>> import inspect
>>> inspect.isclass(inspect)
False
>>> inspect.isclass(inspect.ArgInfo)
True
>>>