python中的__init__ 、__new__、__call__小結(jié)
1.__new__(cls, *args, **kwargs) 創(chuàng)建對(duì)象時(shí)調(diào)用,返回當(dāng)前對(duì)象的一個(gè)實(shí)例;注意:這里的第一個(gè)參數(shù)是cls即class本身
2.__init__(self, *args, **kwargs) 創(chuàng)建完對(duì)象后調(diào)用,對(duì)當(dāng)前對(duì)象的實(shí)例的一些初始化,無返回值,即在調(diào)用__new__之后,根據(jù)返回的實(shí)例初始化;注意,這里的第一個(gè)參數(shù)是self即對(duì)象本身【注意和new的區(qū)別】
3.__call__(self, *args, **kwargs) 如果類實(shí)現(xiàn)了這個(gè)方法,相當(dāng)于把這個(gè)類型的對(duì)象當(dāng)作函數(shù)來使用,相當(dāng)于 重載了括號(hào)運(yùn)算符
看具體的例子:
class O(object):
def __init__(self, *args, **kwargs):
print "init"
super(O, self).__init__(*args, **kwargs)
def __new__(cls, *args, **kwargs):
print "new", cls
return super(O, cls).__new__(cls, *args, **kwargs)
def __call__(self, *args, **kwargs):
print "call"
oo = O()
print "________"
oo()
打印出來的是:
new
init
________
call
比如:Python Singleton(單例模式)實(shí)現(xiàn),那我們是不是只是重載一些__new__方法就可以了
class Singleton1(object):
""" 重載new方法"""
def __new__(cls, *args, **kwargs):
if not "_instance" in vars(cls):
cls._instance = super(Singleton1, cls).__new__(cls, *args, **kwargs)
return cls._instance
可不可以重載__init__方法呢?明顯不可以,因?yàn)開_init__之前調(diào)用了__new__方法,這時(shí)候已經(jīng)生成了一個(gè)對(duì)象了,沒辦法實(shí)現(xiàn)單例模式
- 詳解Python中的__init__和__new__
- Python中__init__和__new__的區(qū)別詳解
- Python中__new__與__init__方法的區(qū)別詳解
- 淺談python中的__init__、__new__和__call__方法
- 深入理解Python中的 __new__ 和 __init__及區(qū)別介紹
- Python函數(shù)__new__及__init__作用及區(qū)別解析
- Python中__new__和__init__的區(qū)別與聯(lián)系
- Python中class內(nèi)置方法__init__與__new__作用與區(qū)別解析
- python __init__與 __new__的區(qū)別
- 詳解Python中__new__和__init__的區(qū)別與聯(lián)系
- python中__new__和__init__的實(shí)現(xiàn)
相關(guān)文章
簡(jiǎn)單了解Python matplotlib線的屬性
這篇文章主要介紹了簡(jiǎn)單了解Python matplotlib線的屬性,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-06-06
windows10安裝python依賴報(bào)錯(cuò)can‘t?create?or?remove?files?in?i
這篇文章主要介紹了windows10安裝python依賴報(bào)錯(cuò)can‘t?create?or?remove?files?in?install?directory問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2023-09-09
Python Excel vlookup函數(shù)實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python Excel vlookup函數(shù)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
淺析Python 中的 WSGI 接口和 WSGI 服務(wù)的運(yùn)行
這篇文章主要介紹了Python 中的 WSGI 接口和 WSGI 服務(wù)的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
Python存儲(chǔ)或讀取json時(shí)如何引入額外的雙引號(hào)和轉(zhuǎn)義引號(hào)
這篇文章主要介紹了Python存儲(chǔ)或讀取json時(shí)如何引入額外的雙引號(hào)和轉(zhuǎn)義引號(hào)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
pip 錯(cuò)誤unused-command-line-argument-hard-error-in-future解決辦法
這篇文章主要介紹了Python包管理器pip安裝軟件時(shí)出現(xiàn)unused-command-line-argument-hard-error-in-future錯(cuò)誤的解決辦法,需要的朋友可以參考下2014-06-06

