首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >所有的Python类都应该扩展object吗?

所有的Python类都应该扩展object吗?
EN

Stack Overflow用户
提问于 2013-03-13 08:27:13
回答 4查看 55.4K关注 0票数 137

我发现以下两项工作都完成了:

代码语言:javascript
复制
class Foo():
    def a(self):
        print "hello"

class Foo(object):
    def a(self):
        print "hello"

所有的Python类都应该扩展object吗?不扩展对象会有什么潜在的问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-13 08:31:30

在Python2中,不继承object将创建一个旧式类,这会导致type产生不同的结果:

代码语言:javascript
复制
>>> class Foo: pass
... 
>>> type(Foo())
<type 'instance'>

代码语言:javascript
复制
>>> class Bar(object): pass
... 
>>> type(Bar())
<class '__main__.Bar'>

此外,多重继承的规则是different,我甚至不想在这里进行总结。我所见过的关于MI的所有优秀文档都描述了新样式的类。

最后,旧式类在Python3中消失了,从object继承变得隐式。所以,除非你需要向后兼容旧的软件,否则总是喜欢新风格的类。

票数 125
EN

Stack Overflow用户

发布于 2013-03-13 08:29:56

在Python3中,类隐式地扩展object,无论您自己是否这样说。

在Python2中,有old-style and new-style类。要表示一个类是新样式的,您必须显式地从object继承。如果不是,则使用旧式实现。

您通常需要一个新样式的类。显式继承自object。请注意,这也适用于旨在与Python 2兼容的Python 3代码。

票数 74
EN

Stack Overflow用户

发布于 2013-03-13 08:29:15

是的,所有的Python类都应该扩展(或者说子类,这里是Python )对象。虽然通常不会发生严重的问题,但在某些情况下(如多继承树),这将是重要的。这也确保了与Python 3更好的兼容性。

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

https://stackoverflow.com/questions/15374857

复制
相关文章

相似问题

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