浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)
生活随笔
收集整理的這篇文章主要介紹了
浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們先來簡單談談python類中一般方法、靜態方法和類方法的區別。
1、類中的一般方法
? ? 一般方法在定義的時候,需要有表示類實例的參數(通常以self表示,例如def foo(self,arg1,arg2……)),一般方法不能通過類名.方法名()來調用,必須先創建類的實例,然后通過實例.方法名()來調用。
2、類中的靜態方法
????類中的靜態方法用“@staticmethod”來修飾,靜態方法在定義的時候,不需要表示類的實例,可想類外的方法定義一樣。靜態方法可以通過類名.方法名()和實例.方法名()調用。
3、類中的類方法
? ? 類方法用“@classmethod”來修飾,類方法在定義的時候,需要有表示類對象的參數。類方法也可以通過類名.方法名()和實例.方法名()調用。(注意:python中,類也是一個對象,這里所說的類對象是指類本身,而非類實例化得對象)
下面我們來看看實際例子:
首先,定義一個類:
class?TestMethod(object):??#一般方法、靜態方法和類方法與是否新式類無關,這里我們舉例用了新式類,但要注意,以下分析同樣適用于經典類def?test(self):????????#這里的self參數是必須的,它表示一個類的實例,但并不一定要用字符串“self”來表示,可以用任意字符表示,只是我們通常使用self表示print("object")?@classmethoddef?test2(clss):???????#這里的clss參數意思必須的,它表示一個類對象,通常該形參我們中“cls”表示print("class")@staticmethoddef?test3():???????????#這里可以不需要任何形參print("static")首先我們用類名.方法名()來調用:
結果如下:
>>>?TestMethod.test() Traceback?(most?recent?call?last):File?"<stdin>",?line?1,?in?<module> TypeError:?unbound?method?test()?must?be?called?with?TestMethod?instance?as?first?argument?(got?nothing?instead) >>>?TestMethod.test2() class >>>?TestMethod.test3() static可以看到,一般方法test()調用異常,必須通過實例來調用
接著我們再用實例調用:
>>>?t?=?TestMethod() >>>?t.test() object >>>?t.test2() class >>>?t.test3() static轉載于:https://blog.51cto.com/ninakesi/1706906
總結
以上是生活随笔為你收集整理的浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis --教程
- 下一篇: 把nc v6的源码看懂