python 类中的对象声明是啥意思,我应该使用它吗? [复制]
Posted
技术标签:
【中文标题】python 类中的对象声明是啥意思,我应该使用它吗? [复制]【英文标题】:What does the object declaration mean in a python class, and should I use it? [duplicate]python 类中的对象声明是什么意思,我应该使用它吗? [复制] 【发布时间】:2012-11-05 15:17:49 【问题描述】:示例 #1:
class Person(object):
pass
示例 #2:
class Person:
pass
对象声明有什么作用?你应该使用它吗?我有一堆程序和他们两个,不知道它有什么不同。如果有人可以解释这个概念,请。
【问题讨论】:
【参考方案1】:在 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 !顺便说一句:AFAIK 使用新型类没有缺点,所以我觉得你应该一直使用它们,无一例外。顾名思义,旧式类的存在只是为了向后兼容(这就是它们最终在 Python 3.0 中被删除的原因)。 感谢您提供不止一个旧的,一个新的。我很感激人们花时间帮助他人学习。 我能想到老式类的一个偶然优势:可以在实例上查找特殊方法。例如。a = oldstyle(); a.__add__ = lambda *args: 'changed'
将起作用,但与 newstyle 对象的等效项将不起作用。也许有一两次我希望这能在不创建新类的情况下工作,但仅此而已,而且主要是我的结构需要重新思考的迹象。【参考方案2】:
在 Python 2 中,object
使其成为“新型类”。这意味着什么的细节并不太重要,但最重要的是您应该始终使用它,否则有些事情可能无法正常工作。
在 Python 3 中,一切都是新式类,所以你不需要在那里使用object
。
【讨论】:
以上是关于python 类中的对象声明是啥意思,我应该使用它吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章