所有的Python类都应该扩展对象吗?

我发现以下两项工作:

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

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

在Python 2中,不从objectinheritance将创build一个旧式的类,除了其他效果,导致type给出不同的结果:

 >>> class Foo: pass ... >>> type(Foo()) <type 'instance'> 

 >>> class Bar(object): pass ... >>> type(Bar()) <class '__main__.Bar'> 

此外,多重inheritance的规则也不尽相同 ,我甚至不会在这里总结。 我见过的有关MI的所有优秀文档都描述了新式类。

最后,旧式类已经在Python 3中消失了,并且从objectinheritance已经变得隐含起来。 所以,除非你需要用旧软件向后兼容,否则总是喜欢新的风格类。

在Python 3中,类可以隐式扩展object ,不pipe你是否自己说。

在Python 2中,有旧式和新式的类。 为了表示一个类是新的,你必须从object明确地inheritance。 否则,使用旧式的实现。

你通常想要一个新式的课程。 显式inheritanceobject

在python 3中,你可以用三种不同的方式创build一个类,在内部它们都是平等的(见例子)。 无论你如何创build一个类,python 3中的所有类都从一个叫做object的特殊类inheritance而来。 类对象是Python中的基础类,提供了很多function,如双下划线方法,描述符,super()方法,property()方法等。

例1

 class MyClass: pass 

例2。

 class MyClass(): pass 

例3。

 class MyClass(object): pass 

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

在python3中没有区别,但是在python2中没有扩展object给你一个旧式的类; 你想在旧式课堂上使用新式课堂。