在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'>
答
这是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'>
严格地说,如果一个类没有元类,那么它就是旧式的。但实质上这是正确的。 +1。 – Marcin