這里需要說明一下:
-
python3中,類定義默認繼承object,所以寫不寫沒有區別
-
但在python2中,並不是這樣
所以此內容是針對python2的,當然python3默認繼承,不代表我們就傻乎乎的讓程序自動繼承,自己卻不知道其底層區別,所以了解此內容還是很有必要的!
測試代碼如下:
# -.- coding:utf-8 -.-
# __author__ = 'zhengtong'
class Person:
"""
不帶object
"""
name = "zhengtong"
class Animal(object):
"""
帶有object
"""
name = "chonghong"
if __name__ == "__main__":
x = Person()
print "Person", dir(x)
y = Animal()
print "Animal", dir(y)
輸出如下:
Person ['__doc__', '__module__', 'name']
Animal ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__',
'__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']
Person類很明顯能夠看出區別,不繼承object對象,只擁有了__doc__ , module 和 自己定義的name變量, 也就是說這個類的命名空間只有三個對象可以操作.
Animal類繼承了object對象,擁有了好多可操作對象,這些都是類中的高級特性。
對於不太了解python類的同學來說,這些高級特性基本上沒用處,但是對於那些要着手寫框架或者寫大型項目的高手來說,這些特性就比較有用了,比如說tornado里面的異常捕獲時就有用到__class__來定位類的名稱,還有高度靈活傳參數的時候用到__dict__來完成等。
-
python2中不繼承object的類叫經典類,繼承object的類叫做新式類。
-
我們平時寫程序時,不妨養成良好的習慣,將object類繼承上。