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 类中的对象声明是啥意思,我应该使用它吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Haskell 类型声明中的符号 `!` 是啥意思?

java的System. out. println()是啥意思?out是System类中的吗?

python中的iterable是啥意思

java类中的成员缺省(默认的)的修饰符是啥??

Rust 声明性宏中的 @ 符号是啥意思?

java类中的静态常量是啥时候初始化的