如何在不用Python实例化的情况下获取类的类型?

时间:2016-07-29 11:09:17

标签: python python-3.x oop

给定一个对象很容易在python中获取对象类型:

obj = SomeClass()
t = type(obj)

如果没有先创建类的实例,我怎么能这样做?

背景:获得该类型后,您可以轻松创建该类型的实例。使用这种机制我想将一个类型传递给一个对象,该对象稍后将创建该类型的实例。不必首先创建一个会立即被丢弃的对象是非常合理的。

2 个答案:

答案 0 :(得分:2)

请参阅此示例代码:

class MyClass(object):
    pass

if __name__ == '__main__':
    o1 = MyClass()
    c = MyClass
    o2 = c()

    print(type(o1), type(o2), MyClass)

定义一个类将其绑定到它的名称(此处为:MyClass),这只是对该定义的引用。在此示例中,发出c = MyClass只是将类引用镜像到另一个变量,变量cMyClass的内容现在完全相同。因此,您可以通过调用其中任何一个(即MyClass()c())来实例化该类的对象,从而产生相同的效果。

此外,测试实例化对象的类型会导致完全相同的类引用。你甚至可以更进一步做:

o3 = type(o1)()

这会创建一个类o1的新实例。

答案 1 :(得分:1)

这个答案是为那些来到这个页面想知道的人准备的,“我怎样才能检查一个类的类型而不在 Python 中实例化它?”

如果您正在处理一个包含类而不是对象的变量,您可以使用 issubclass() 内置函数检查它是否是某个类。

建立在上一个答案的基础上:

>>> class MyClass(object):
>>>    pass

>>> type(c)
<class 'type'>

>>> c = MyClass
>>> issubclass(c, MyClass)
True