首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类ClassName与类ClassName(object)

类ClassName与类ClassName(object)
EN

Stack Overflow用户
提问于 2012-04-06 21:12:10
回答 2查看 22.3K关注 0票数 25

它们之间的区别是什么:

代码语言:javascript
复制
class ClassName(object):
    pass

代码语言:javascript
复制
class ClassName:
    pass

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

(我知道class Classname(ParentClassName)有一个功能用法)

EN

回答 2

Stack Overflow用户

发布于 2012-04-06 21:27:32

在Python2.x中,当你从"object“继承时,你的类是一个”新风格“的类--这是在Python2.2(大约2001年)中实现的--不从"object”继承的情况创建了一个“旧风格”类,实际上只是为了向后兼容而维护的。

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

真正有区别的并不是真正的“继承自对象”,而是因为Python中的类也是对象,这确实改变了类的类本身(类的类被称为“元类”)。因此,如果您将元类设置为"type",则无需继承object即可获得新的样式类。

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

在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

票数 21
EN

Stack Overflow用户

发布于 2012-04-06 21:15:27

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

第二个示例演示了一个旧风格的类。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10043963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档