为什么在Python中需要从object子类化?
我已经用Python一段时间了,但还是不太明白为什么要从object
这个类去继承。下面这两种写法有什么区别呢:
class MyClass():
pass
和这个:
class MyClass(object):
pass
根据我的理解,object
是所有类的基础类,继承它是默认的。那从它明确继承有什么好处呢?在Python中,最“Pythonic”的做法是什么呢?
2 个回答
9
我同意@kriss、@Noctis和@Carson的看法,下面我再补充一些:
class X: pass
和 class X(): pass
是创建经典类的两种写法,而 class X(object): pass
是用来创建新式类的,具体可以参考这里:
>>> class X:pass
...
>>> class Y(): pass
...
>>> class Z(object): pass
...
>>>
>>> type(X), type(Y), type(Z)
(<type 'classobj'>, <type 'classobj'>, <type 'type'>)
想了解更多区别,可以看看@kriss提供的参考资料。在Python 3中,经典类的概念已经不再有效,因为经典类已经被淘汰了。在Python 3.x中,上面提到的三种写法都会创建新式类:
>>> class X:pass
...
>>> class Y(): pass
...
>>> class Z(object): pass
...
>>>
>>> type(X), type(Y), type(Z)
(<class 'type'>, <class 'type'>, <class 'type'>)
总结一下?如果你在用Python 2编程,尽量多用新式类。这样的话,你就为将来迁移到Python 3做好了准备,而且新式类比经典类有更多的功能。(这有点主观,但如果你的[经典]类比较简单,可能在Python 3中不需要做太多修改就能正常工作。)