old-style and new-style classes in Python 2.7?
Possible Duplicate:
Old style and new style classes in Python
在Python2.7中,新样式和旧样式类的现状是什么?我不经常使用Python,但我模糊地记得这个问题。文档似乎根本没有提到这个问题:Python教程:类。我还需要为此担心吗?一般来说,我应该声明我的类如下:
还是?
1 2
| class MyClass(object):
pass |
- @伦纳特雷格布罗:这个问题是在2008年提出的,2008年也得到了公认的答案。我在问2012年的python 2.7情况如何。我读了那个问题后,答案并不明显。
- 您有理由认为答案会从python 2.6改为python 2.7吗?尽管这无关紧要。不管你为什么要发表这个问题,它都是完全相同的。
- @伦纳特雷格布罗:是的,4年是一段很长的时间,很多可以改变。没有意识到Python2.6是4年前的。
- 在这种情况下,可以选择对原始问题发表评论,询问这是否仍然有效。但在我看来,除非你有理由怀疑它已经改变了,否则你甚至不需要这样做。答案非常清楚:不要使用旧样式的类,它们只是为了向后兼容。为什么Python2.7的答案会改变呢?他们会突然认为旧式课程实际上更好吗?当然不是。
- @伦纳特雷格布罗:也许作为一个经常关注python社区的人,这是显而易见的,但作为一个不关注python社区的人,这是不明显的。事实上,我确实就这个问题问了一个评论,但16小时后,它仍然没有得到回答。回答这个问题花了几秒钟。当我在google上搜索"python classes"时,我被带到docs.python.org/2/tutorial/classes.html,那里没有一个"object"派生的"new-style"类的例子,这让我怀疑是否应该声明我的类,如class MyClass或class MyClass(object),因此我的问题。
- 这并不是一个重复的问题:首先,它有两种风格的句法:前面和中间,链接的问题在问题或答案中都没有提到。这个问题/答案对于一些刚接触过python的人,或者刚刚接触过3.x之后才接触过2.x的人来说,要好得多。
总是子类"对象"。这些是新样式的类。
- 更不用说方法修饰符(@property、@classmethod和@staticmethod只适用于新型类。
- 你不能在PY3上做class MyClass:吗?尽管它还是一个新的风格类??
- @GP89:是的,在Python3中。
您应该总是使用新的样式类。新的样式类是统一Python编程语言中内置类型和用户定义类的工作的一部分。
新样式类可以提供以下几种功能:
- 属性:由get/set方法定义的属性
- 静态方法和类方法
- 新的getattribute钩子,与getattr不同,它被调用对于每个属性访问,不仅仅是当属性不能在实例中找到
- 描述符:定义属性访问行为的协议通过对象
- 重写构造函数new
- 元类
来源。