標籤:

跟黃哥學python之「為啥類第一個參數是實例對象」

python類的第一個參數為啥默認傳的是實例對象。

請看黃哥的代碼和視頻說明。點擊播放

#! /usr/bin/python# coding:utf-8"""本代碼由python遠程培訓班和周末班培訓班授課老師黃哥所寫。__new__和__init__到底是怎麼一回事,看下面的代碼如果類沒有定義__new__方法,就從父類繼承這個__new__方法。__new__先於__init__執行,類帶括弧調用時,發生這樣的一件事,先調用類的__new__方法,放回該類的實例對象,這個實例對象就是__init__方法的第一個參數。請看代碼中tmp,self,p的內存地址都是一樣的,都是類的實例對象。 """class Foo(object): def __new__(cls, *args, **kwargs): """如果不覆蓋這個__new__方法,也就是說不寫這個__new__方法,類會從object 繼承__new__方法完成返回值實例對象 """ print("__new__方法先被調用") tmp = super(Foo, cls).__new__(cls, *args, **kwargs) print(id(tmp)) print(type(tmp)) print(isinstance(tmp, Foo)) print(issubclass(type(tmp), Foo)) return(tmp) def __init__(self): """self是python默認傳的值,該值是調用__new__的返回值""" print("__init__被調用") print(id(self))p = Foo()print(id(p))print(type(p))

代碼運行結果

__new__方法先被調用4351203424<class __main__.Foo>TrueTrue__init__被調用43512034244351203424<class __main__.Foo>

推薦閱讀:

怎麼用 Python 編寫程序計算字元串中某個字元的個數?
完全理解Python關鍵字&quot;with&quot;與上下文管理器
好玩的Python:植樹問題,平閏年,雞兔同籠,百錢白雞,屬相問題
python with提前退出:坑與解決方案
用 Python 解析李小璐的微博,驚呆了!

TAG:Python |