生活随笔
收集整理的這篇文章主要介紹了
python 静态方法与类方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 對象方法有self參數,類方法有cls參數,靜態方法是不需要這些附加參數的。
2. @staticmethod和@classmethod都是用來定義靜態函數的。
相同點:
都不用實例化類,可以直接用類名來調用其相關屬性。
不同點:
@classmethod的第一個參數是cls,因此可以訪問類變量,或是用作類廠。
@staticmethod只是自身代碼在類里面,對類的其它再無相關。
3. 一般情況下用@classmethod,@staticmethod只適用于不想定義全局函數的情況。
4. 類方法可以訪問per-class的數據。舉個不實際的例子:
[python]?view plaincopy
>>>?class?Named(object):?? ...?????@classmethod?? ...?????def?name(cls):?? ...?????????????return?cls.__name__?? ...??? >>>?class?Sub(Named):?? ...?????pass?? ...??? >>>?obj?=?Sub()?? >>>?obj.name()?? 'Sub'??
[python]?view plaincopy
------------------------------------------------------------------------------------------------------------------------------??
[python]?view plaincopy
第一種方式(staticmethod):?? ?? >>>?class?Foo:?? ????????str?=?"sample."?? ?? ????????def?bar():?? ????????????print?Foo.str?? ?? ????????bar?=?staticmethod(bar)?? ?? ?? >>>?Foo.bar()?? sample.?? ?? 第二種方式(classmethod):?? ?? >>>?class?Foo:?? ????????str?=?"sample."?? ?? ????????def?bar(cls):?? ????????????print?cls.str?? ?? ????????bar?=?classmethod(bar)?? ?? >>>?Foo.bar()?? sample.?? ?? ---------------------------------------------------------------?? ?? 上面的代碼我們還可以寫的更簡便些:?? ?? >>>?class?Foo:?? ????????str?=?"sample."?? ? ????????@staticmethod?? ????????def?bar():?? ????????????print?Foo.str?? ?? >>>?Foo.bar()?? sample.?? ?? 或者?? ?? >>>?class?Foo:?? ????????str?=?"sample."?? ? ????????@classmethod?? ????????def?bar(cls):?? ????????????print?cls.str?? ?? >>>?Foo.bar()?? sample??? ?? <p>?</p>??
總結
以上是生活随笔為你收集整理的python 静态方法与类方法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。