python定義類()中寫object和不寫的區別


這里需要說明一下:

  • 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類繼承上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM