在python中输入`instance`

时间:2013-03-29 21:48:21

标签: python

我尝试print type (variable)看看哪个类是变量,repl告诉我:

<type 'instance'>

有没有办法看看如何构建/构造变量?

1 个答案:

答案 0 :(得分:7)

这意味着您正在使用旧式课程。在新代码中,您的所有类都应继承自object

In [3]: class A(object):
   ...:         pass

In [5]: type(A())
Out[5]: __main__.A

通过查看__class__

,您仍然可以获得旧式课程的课程
In [1]: class A: pass

In [2]: A().__class__
Out[2]: __main__.A

http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes

  

类和实例有两种形式:旧式(或经典)和新式。

     

在Python 2.1之前,旧式类是用户可用的唯一风格。 (旧式)类的概念与类型的概念无关:如果x是旧式类的实例,则x.__class__指定x的类,但是type(x)始终为<type 'instance'>。这反映了这样一个事实:所有旧式实例,与其类无关,都是使用单个内置类型实现的,称为实例

     

在Python 2.2中引入了新式类来统一类和类型。新式类既不是用户定义的类型,也不是用户定义的类型。如果x是新样式类的实例,那么type(x)通常与x.__class__相同(尽管不能保证 - 允许新式类实例覆盖x.__class__)返回的值。

     

...

     

出于兼容性原因,默认情况下类仍为旧式。通过将另一个新样式类(即类型)指定为父类来创建新样式类,或者如果不需要其他父类,则创建“顶级类型”对象。除了type()返回的内容之外,新样式类的行为在许多重要细节中与旧样式类的行为不同。其中一些更改是新对象模型的基础,就像调用特殊方法的方式一样。其他是针对兼容性问题无法实现的“修复”,例如多重继承时的方法解析顺序。

     

在Python 3中删除了旧式类,只留下了新式类的语义。