对象声明在python类中意味着什么,我应该使用它吗?

时间:2012-11-16 21:02:19

标签: python oop inheritance

示例#1:

class Person(object):
    pass

示例#2:

class Person:
    pass

对象声明有什么作用?你应该用吗?我有两个程序都有这两个程序,并不知道它正在制造的差异。如果有人能解释这个概念,请

2 个答案:

答案 0 :(得分:14)

在Python2中,将object声明为基类会使类成为new-style class。否则,它是一个“经典”类。差异在于

  • 属性仅适用于新式类

  • 新式课程有mro method

  • 新式类有许多经典类缺少的属性

    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中,所有类都是新式的,因此不需要在那里显式声明。

答案 1 :(得分:0)

在Python 2中,object使其成为“新风格的类”。这意味着什么的细节并不太重要,但最重要的是你应该总是使用它,或者某些东西可能无法正常工作。

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