2016-07-29 110 views
2

给定一个对象很容易得到蟒蛇的对象类型:如何在不用Python实例化的情况下获取类的类型?

obj = SomeClass() 
t = type(obj) 

我怎么能做到这一点,而不首先创建类的实例?

背景:一旦你有了类型,你就可以轻松地创建该类型的实例。使用这种机制,我想将一个类型传递给稍后将创建该类型实例的对象。没有必要首先创建一个对象,这将是非常合理的,它会立即被抛弃。

+7

't = SomeClass' – vaultah

+0

对象的类型与创建它的类相同。因此,SomeClass对象的类型是SomeClass。在Python 2中,来自旧样式类的对象的类型为'instance',但在Python 3中不是这样。 – zondo

回答

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是一个新的实例。

+0

感谢您更详细地解释! –

相关问题