Python的類方法和靜態(tài)方法

類方法和靜態(tài)方法

  • @staticmethod 表示下面 方法是靜態(tài)方法
  • @classmethod 表示下面的方法是類方法

例子

>>> class StaticMethod(object):
...     @staticmethod
...     def foo():
...         print "this is static method foo()"
...

>>> class ClassMethod:
...     @classmethod
...     def bar(cls):
...         print "this is class method bar()"
...         print "bar() is part of class:",cls.__name__
... 

>>> static_foo = StaticMethod()
>>> static_foo.foo()
this is static method foo()
>>> StaticMethod.foo()
this is static method foo()
>>> 

>>> class_bar = ClassMethod()
>>> class_bar.bar()
this is class method bar()
bar() is part of class: ClassMethod
>>> ClassMethod.bar()
this is class method bar()

從以上例子寸痢,可以看出:

  • 無論是類方法南蓬、靜態(tài)方法,方法后面的括號內(nèi)呐舔;
  • 都可以不用加self作為第一個參數(shù),都可以使用實例調(diào)用方法或者類名調(diào)用方法。
  • 在類方法的參數(shù)中滥崩,需要使用cls作為參數(shù)。
  • 在靜態(tài)方法的參數(shù)中讹语,沒有self參數(shù)钙皮,就無法訪問實例變量,類和實例的屬性了顽决。

類方法和靜態(tài)方法的區(qū)別

>>> class Kls(object):
...     def __init__(self,data):
...         self.data = data
...     def printd(self):
...         print(self.data)
...     @staticmethod
...     def smethod(*arg):
...         print 'Static:',arg
...     @classmethod
...     def cmethod(*arg):
...         print 'Class:',arg
... 
>>> ik = Kls(24)
>>> ik.printd()
24

>>> ik.smethod()
'Static:', ()

>>> ik.cmethod()
'Class:', (<class '__main__.Kls'>,)

>>> Kls.printd()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method printd() must be called with Kls instance as first argument (got nothing instead)

>>> Kls.smethod()
'Static:', ()

>>> Kls.cmethod()
'Class:', (<class '__main__.Kls'>,)

從以上例子可以看出短条,類方法默認的第一個參數(shù)是他所屬的類的對象,而靜態(tài)方法沒有才菠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茸时,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赋访,更是在濱河造成了極大的恐慌可都,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚓耽,死亡現(xiàn)場離奇詭異渠牲,居然都是意外死亡,警方通過查閱死者的電腦和手機步悠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門签杈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贤徒,你說我怎么就攤上這事芹壕』闼模” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵踢涌,是天一觀的道長通孽。 經(jīng)常有香客問我,道長睁壁,這世上最難降的妖魔是什么背苦? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮潘明,結(jié)果婚禮上行剂,老公的妹妹穿的比我還像新娘。我一直安慰自己钳降,他們只是感情好厚宰,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遂填,像睡著了一般铲觉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吓坚,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天撵幽,我揣著相機與錄音,去河邊找鬼礁击。 笑死盐杂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的哆窿。 我是一名探鬼主播链烈,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼更耻!你這毒婦竟也來了测垛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤秧均,失蹤者是張志新(化名)和其女友劉穎食侮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體目胡,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡锯七,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了誉己。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眉尸。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出噪猾,到底是詐尸還是另有隱情霉祸,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布袱蜡,位于F島的核電站丝蹭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坪蚁。R本人自食惡果不足惜奔穿,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望敏晤。 院中可真熱鬧贱田,春花似錦、人聲如沸嘴脾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽统阿。三九已至彩倚,卻和暖如春筹我,著一層夾襖步出監(jiān)牢的瞬間扶平,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工蔬蕊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留结澄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓岸夯,卻偏偏與公主長得像麻献,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子猜扮,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容