11

示例#1:

class Person(object):
    pass

示例#2:

class Person:
    pass

对象声明有什么作用?你应该使用它吗?我有一堆程序和他们两个,不知道它有什么不同。如果有人可以解释这个概念,请。

4

2 回答 2

15

在 Python2 中,声明object为基类使该类成为新式类。否则,它是一个“经典”类。不同之处在于

  • 属性仅适用于新式类

  • 新式类有mro方法

  • 新式类有很多经典类所缺乏的属性

    In [288]: class Foo: pass
    In [289]: dir(Foo) 
    Out[289]: ['__doc__', '__module__']
    
    In [290]: class Bar(object): pass
    In [291]: dir(Bar) 
    Out[291]:  ['__class__',  '__delattr__',     '__dict__',  '__doc__',  '__format__',  '__getattribute__',     '__hash__',  '__init__',  '__module__',  '__new__',  '__reduce__',     '__reduce_ex__',  '__repr__',  '__setattr__',  '__sizeof__',     '__str__',  '__subclasshook__',  '__weakref__']
    

经典类保留在 Python2 中只是为了向后兼容。您定义的所有自定义类都应该是新样式的。

在 Python3 中,所有的类都是新式的,所以不需要在那里显式声明。

于 2012-11-16T21:04:17.200 回答
0

在 Python 2 中,object它成为“新式类”。这意味着什么的细节并不太重要,但最重要的是您应该始终使用它,否则某些事情可能无法正常工作。

在 Python 3 中,一切都是新式的类,所以你不需要在object那里使用。

于 2012-11-16T21:04:23.497 回答