对象声明在python类中意味着什么,我应该使用它吗? 示例#1: 示例2:

对象声明在python类中意味着什么,我应该使用它吗? 示例#1: 示例2:,python,oop,inheritance,Python,Oop,Inheritance,对象声明的作用是什么?你应该用它吗?我和他们都有很多节目,但我不知道这有什么不同。如果有人能解释这个概念,请。在Python2中,声明对象作为基类,使类成为a类。否则,它是一个“经典”类。区别之一是 属性仅适用于新样式的类 新样式的类具有 新样式类具有许多经典类所缺少的属性 In [288]: class Foo: pass In [289]: dir(Foo) Out[289]: ['__doc__', '__module__'] In [290]: class Bar(object):

对象声明的作用是什么?你应该用它吗?我和他们都有很多节目,但我不知道这有什么不同。如果有人能解释这个概念,请。

在Python2中,声明
对象
作为基类,使类成为a类。否则,它是一个“经典”类。区别之一是

  • 属性仅适用于新样式的类

  • 新样式的类具有

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

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

在Python2中,
对象使其成为“新样式类”。这意味着什么的细节并不太重要,但底线是你应该始终使用它,否则有些事情可能会不正常


在Python3中,所有内容都是一个新样式的类,因此您不需要在那里使用
对象。

+1!顺便说一句:好吧,使用新样式的类没有缺点,所以我觉得您应该无一例外地一直使用它们。顾名思义,旧式类的存在只是为了向后兼容(这就是为什么它们最终在Python3.0中被删除的原因)。我很欣赏人们花时间帮助他人学习。我能想到老式类的一个偶然优势:可以在实例上进行特殊的方法查找。例如,
a=oldstyle();a、 \uuuu add\uuuu=lambda*args:'changed'
将起作用,但与newstyle对象等效的参数将不起作用。也许有一两次,我希望这在不创建新类的情况下也能起作用,但就是这样,大多数情况下,这是我的结构需要重新思考的迹象。
class Person:
    pass
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__']