2012-12-11 24 views
20

可能重复:
Old style and new style classes in PythonPython 2.7中的旧式和新式类?

什么是新的风格和老式类事务在Python 2.7的现状如何?我经常不使用Python,但我依稀记得这个问题。文档似乎没有提到这个问题:The Python Tutorial: Classes。我仍然需要担心这个吗?在一般情况下,我应该宣布我的类如下:

class MyClass: 
    pass 

或?

class MyClass(object): 
    pass 
+2

@LennartRegebro:这个问题被问在2008年,也是在2008年被接受的答案。我在问Python 2.7的情况是什么。通过阅读这个问题,答案对我来说并不明显。 – User

+0

你有什么理由认为答案会从Python 2.6改为Python 2.7?尽管这并不重要。无论你的原因是发布这个问题,它是一个确切的副本。 –

+0

@LennartRegebro:是的4年是很多时间,很多可以改变。没有意识到Python 2.6是4年前。 – User

回答

21

总是子类“对象”。那些是新式的课程。

  • 你已经为python 3做好了准备。

  • 之类的东西.super()正常工作这种方式,你需要他们。

+6

更不用说方法装饰器('@ property','@ classmethod'和'@ staticmethod')只适用于新式课程。 –

+3

你不能在py3中做'class MyClass:',它仍然是一个新的风格类,虽然?? – GP89

+0

@ GP89:是的,在Python 3中。 –

9

你应该总是使用新的风格类。新样式类是努力统一Python编程语言中的内置类型和用户定义类的一部分。

新式类有几件事情要提供如:

  • 属性:由get/set方法
  • 静态方法和类方法
  • 的getAttribute钩定义的属性,这与getattr不同,对于每个属性访问都被称为 ,而不仅仅是在实例中找不到
  • 描述符:协议定义的属性访问 通过对象
  • 行为重写构造
  • 元类

Source.