所有的Python类都应该扩展对象吗?
我发现以下两项工作:
class Foo(): def a(self): print "hello" class Foo(object): def a(self): print "hello"
所有的Python类都应该扩展对象吗? 没有扩展对象有什么潜在的问题吗?
在Python 2中,不从object
inheritance将创build一个旧式的类,除了其他效果,导致type
给出不同的结果:
>>> class Foo: pass ... >>> type(Foo()) <type 'instance'>
与
>>> class Bar(object): pass ... >>> type(Bar()) <class '__main__.Bar'>
此外,多重inheritance的规则也不尽相同 ,我甚至不会在这里总结。 我见过的有关MI的所有优秀文档都描述了新式类。
最后,旧式类已经在Python 3中消失了,并且从object
inheritance已经变得隐含起来。 所以,除非你需要用旧软件向后兼容,否则总是喜欢新的风格类。
在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
给你一个旧式的类; 你想在旧式课堂上使用新式课堂。