摘要:而呢,它沒(méi)有默認(rèn)的第一個(gè)輸入變量。它跟我們?cè)谝粋€(gè)空白的里寫(xiě)的一個(gè)普通的函數(shù)沒(méi)有任何實(shí)質(zhì)的區(qū)別。唯一的不同就是你要通過(guò)類(lèi)或者實(shí)例來(lái)它。
class A(object): def foo(self, x): print "executing foo(%s, %s)" % (self, x) @classmethod def class_foo(cls, x): print "executing class_foo(%s, %s)" % (cls, x) @staticmethod def static_foo(x): print "executing static_foo(%s)" % x a = A()
看一下輸出:
常規(guī)定義的方法:
a.foo(1) # executing foo(<__main__.A object at 0xb7dbef0c>,1)
classmethod的輸出:
a.class_foo(1) # executing class_foo(,1)
以上代碼可以看出,創(chuàng)建classmethod時(shí),該對(duì)象實(shí)例的class cls 是作為第一個(gè)輸入變量的,而不是該實(shí)例本身(如果是實(shí)例本身的話,第一個(gè)輸入變量就是self, 就是一個(gè)普通的我們常用的情況了)
這樣創(chuàng)建的classmethod 有什么好處呢? 好處就是你可以直接用class來(lái)call這個(gè)函數(shù),而不需要費(fèi)周折地先去創(chuàng)建一個(gè)實(shí)例(class instance)。
而staticmethods呢,它沒(méi)有默認(rèn)的第一個(gè)輸入變量。 它跟我們?cè)谝粋€(gè)空白的script里寫(xiě)的一個(gè)普通的函數(shù) def fund():... 沒(méi)有任何實(shí)質(zhì)的區(qū)別。唯一的不同就是你要通過(guò) 類(lèi)class 或者實(shí)例instance 來(lái)call它。
With staticmethods, neither self (the object instance) nor cls (the class) is implicitly passed as the first argument. They behave like plain functions except that you can call them from an instance or the class.
本文參考來(lái)源:https://stackoverflow.com/que...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43913.html
摘要:而類(lèi)的實(shí)例并不會(huì)影響類(lèi)的靜態(tài)變量,只是會(huì)修改對(duì)象實(shí)例本身的值,所以后面兩個(gè)的結(jié)果總是同樣,如果我們使用和結(jié)果也將僅僅是靜態(tài)變量變化后的結(jié)果,與類(lèi)的實(shí)例無(wú)關(guān)以上是對(duì)和的暫時(shí)做的了解的總結(jié),如有紕漏,請(qǐng)及時(shí)指正 概念 python 的classmethod 與staticmethod 這兩個(gè)有什么區(qū)別? 二者又有什么聯(lián)系?在google和baidu之后, 得到的大致的聯(lián)系就是二者都是對(duì)類(lèi)的...
摘要:由上面的注釋?zhuān)梢钥闯銎鋵?shí)就相當(dāng)于一個(gè)描述符類(lèi),而在此刻變成了一個(gè)描述符。調(diào)用這個(gè)方法可以知道,每調(diào)用一次,它都會(huì)經(jīng)過(guò)描述符類(lèi)的?;诿枋龇绾螌?shí)現(xiàn)同樣的也是一樣。我想你應(yīng)該對(duì)描述符在中的應(yīng)用有了更深的理解。好吧,我承認(rèn)我標(biāo)題黨了。但是這篇文章的知識(shí)點(diǎn),你有極大的可能并不知道。 前段時(shí)間,我寫(xiě)了一篇描述符的入門(mén)級(jí)文章,從那些文章里你知道了如何定義描述符,且明白了描述符是如何工作的。 如果你還...
摘要:由上面的注釋?zhuān)梢钥闯銎鋵?shí)就相當(dāng)于一個(gè)描述符類(lèi),而在此刻變成了一個(gè)描述符。調(diào)用這個(gè)方法可以知道,每調(diào)用一次,它都會(huì)經(jīng)過(guò)描述符類(lèi)的。基于描述符如何實(shí)現(xiàn)同樣的也是一樣。我想你應(yīng)該對(duì)描述符在中的應(yīng)用有了更深的理解。好吧,我承認(rèn)我標(biāo)題黨了。但是這篇文章的知識(shí)點(diǎn),你有極大的可能并不知道。 前段時(shí)間,我寫(xiě)了一篇描述符的入門(mén)級(jí)文章,從那些文章里你知道了如何定義描述符,且明白了描述符是如何工作的。 如果你還...
摘要:盡管和非常相似,但在用法上依然有一些明顯的區(qū)別。所以,從靜態(tài)方法的使用中可以看出,我們不會(huì)訪問(wèn)到本身它基本上只是一個(gè)函數(shù),在語(yǔ)法上就像一個(gè)方法一樣,但是沒(méi)有訪問(wèn)對(duì)象和它的內(nèi)部字段和其他方法,相反會(huì)訪問(wèn),會(huì)訪問(wèn)。 python staticmethod and classmethod Though classmethod and staticmethod are quite simil...
摘要:什么是中的它的用途是什么裝飾器對(duì)應(yīng)的函數(shù)不需要實(shí)例化,不需要參數(shù),但第一個(gè)參數(shù)需要是表示自身類(lèi)的參數(shù),可以來(lái)調(diào)用類(lèi)的屬性,類(lèi)的方法,實(shí)例化對(duì)象等。 什么是python中的classmethod,它的用途是什么? classmethod裝飾器對(duì)應(yīng)的函數(shù)不需要實(shí)例化,不需要 self 參數(shù),但第一個(gè)參數(shù)需要是表示自身類(lèi)的 cls 參數(shù),可以來(lái)調(diào)用類(lèi)的屬性,類(lèi)的方法,實(shí)例化對(duì)象等。 cl...
閱讀 1745·2021-10-18 13:30
閱讀 2637·2021-10-09 10:02
閱讀 2972·2021-09-28 09:35
閱讀 2099·2019-08-26 13:39
閱讀 3532·2019-08-26 13:36
閱讀 1960·2019-08-26 11:46
閱讀 1144·2019-08-23 14:56
閱讀 1703·2019-08-23 10:38