在Python中的类的实例的奇怪类型信息OOP

在Python中的类的实例的奇怪类型信息OOP

问题描述:

我想确定一个对象的类型信息。在Python中的类的实例的奇怪类型信息OOP

>>> class Class1: pass 

>>> obj1=Class1() 
>>> type(obj1) 
<type 'instance'> 

我期待type(obj1)返回'Class1'。为什么它是'instance'而不是?什么是'instance'

在Python2中,如果一个类没有从object(直接或间接)继承,那么它将被视为旧式类。在旧式类中,所有实例都是'instance'类型。

docs

(老式)类的概念是无关的type概念: 如果x是一个旧式的类的实例,然后x.__class__指定 类的x,但type(x)总是<type 'instance'>

更改您的类从object继承,使之成为新式类:

class Class1(object): pass 

演示:

>>> class Class1(object): pass 

>>> type(Class1()) 
<class '__main__.Class1'> 
+0

严格地说,如果一个类没有元类,那么它就是旧式的。但实质上这是正确的。 +1。 – Marcin

这是new-style and classic classes之间的区别之一在Python 2 。X。事实上:

(老式)类的概念无关类型的概念:如果x是一个旧式的类的实例,然后x.__class__指定类的x,但type(x)总是<type 'instance'>

您必须使用新的样式类,从object继承以获得预期的type()结果。

>>> class C1: pass 
... 
>>> class C2(object): pass 
... 
>>> type(C1()) 
<type 'instance'> 
>>> type(C2()) 
<class '__main__.C2'>