类名与类类名(对象)

  • 本文关键字:对象 python class object
  • 更新时间 :
  • 英文 :


两者之间有什么区别:

class ClassName(object):
    pass

class ClassName:
    pass

当我调用这些类模块的帮助函数时,您可以在帮助的 CLASS 标题下阅读第一种情况____builtin____.object。对于第二种情况,它只显示类名。这些类和/或其可能的方法之间是否有任何功能差异?

(我知道class Classname(ParentClassName)有功能用途)

在Python 2.x中,当你从"对象"继承时,你的类是一个"新风格"类 - 早在Python

2.2(2001年左右)中实现 - 非继承自"对象"的情况创建了一个"旧风格"类,实际上只是为了向后兼容而维护。

"新样式"类的最大好处是跨 Python 的类型统一 - 在此之前,人们无法正确子类内置类型,如 int、list、dict。还指定了一个"描述符协议",它描述了用于检索和设置对象属性的协议,为语言提供了很大的灵活性。(当一个人在类中使用Python"属性"时,它更明显)。

真正造成差异的实际上并不是"从对象继承",但是,由于 Python 中的类也是对象,这确实会改变类的类本身(类的类被称为它的"元类")。因此,如果将元类设置为"type",则无需从对象继承即可获得新的样式类。

强烈建议在 Python 2.x 中,所有类都是新样式 - 使用旧样式类可能适用于一些简单的情况,但是当您尝试使用属性、pickle、描述符和其他高级功能时,它们会产生许多微妙的、难以发现的错误。最重要的是,当您尝试检查对象的"类型"时,对于旧样式类中的所有对象,即使它们来自不同的用户定义类,它也是相同的(类型"实例")。

在 Python 3.x 版本中,所有类都是新样式 - 无需设置元类。

Python的文档"数据模型"是"法律之书",其中两者的行为详细定义了类类型(足以允许重新实现语言):

http://docs.python.org/reference/datamodel.html

Guido 的这篇博文用更轻的语言讨论了新风格课程背后的动机:

http://python-history.blogspot.com.br/2010/06/new-style-classes.html

http://docs.python.org/release/2.5.2/ref/node33.html

ClassName(object)使用新的样式类:http://docs.python.org/release/2.5.2/ref/node33.html

第二个示例演示了一个旧样式类。

在python 3中,默认情况下使用新的样式类,您将不再需要子类object

最新更新