class ClassName与类ClassName(对象)

Ben*_*ey4 20 python class object

有什么区别:

class ClassName(object):
    pass
Run Code Online (Sandbox Code Playgroud)

class ClassName:
    pass
Run Code Online (Sandbox Code Playgroud)

当我调用那些类的模块的帮助功能时,你可以阅读____builtin____.objectCLASS标题下的第一个案例.对于第二种情况,它只显示类名.这些类和/或其可能的方法之间是否存在功能差异?

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

jsb*_*eno 18

在Python 2.x中,当你从"object"继承时,你的类是一个"新风格"类 - 它在Python 2.2(2001年左右)中实现 - 非继承自"object"的情况创建了一个"旧样式"类,实际上只是为了向后兼容而维护.

"新风格"类的巨大好处是跨Python的类型的统一 - 在此之前,人们不能正确地子类化内置类型,如int,list,dict.还有一个"描述符协议",它描述了一个用于检索和设置对象属性的协议,为语言提供了很大的灵活性.(当在类中使用Python"属性"时,它更加明显).

有什么区别实际上并不是"继承自对象",但是,由于Python中的类也是对象,这确实改变了类的类本身(类的类被称为"元类").因此,如果将元类设置为"type",则不需要从object继承以获得新的样式类.

这是强烈推荐的是Python 2.x中,所有的类都是新的风格-使用旧的样式类可用于某些单一简单的情况下工作,但它们可以产生很多微妙的,不易发现,错误的,当您尝试使用属性,pickle,描述符和其他高级功能.最重要的是,当您尝试检查对象的"类型"时,对于旧样式类中的所有对象,它们将是相同的(类型"实例"),即使它们来自不同的用户定义类.

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

Python的文档"datamodel"是"法律书籍",其中两个类典型的行为被详细定义(足以允许重新实现该语言):

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


jam*_*lak 5

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

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

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