python類方法與靜態方法

python類裏面的實例方法我是很常用的,這個類方法和靜態方法不怎麼常用。所以有必要記錄一下:
靜態方法,使用@staticmethod修飾;
類方法,使用@classmethod修飾。

實例方法

定義:第一個參數必須是實例對象,參數名約定爲“self”(當然,這個是可以改變的,但還是要self好點),通過它來傳遞實例的屬性和方法(也可以傳類的屬性和方法);
調用:在類外部,原則上由實例對象調用。

類方法

定義:使用裝飾器@classmethod。第一個參數必須是當前類對象,參數名約定爲“cls”,通過它來傳遞類的屬性和方法,原則上不傳實例的屬性和方法【但想傳也是可以的】;
調用:實例對象和類對象都可以調用。

靜態方法

定義:使用裝飾器@staticmethod。參數隨意,沒有“self”和“cls”參數,原則上靜態方法體中不使用類或實例的任何屬性和方法,但本質上是可以調用的;
調用:實例對象和類對象都可以調用。

至於以上爲什麼要加個原則上,因爲python不是java,沒有java那麼安全的類對象管理機制,也可以說成python的類對象機制比較的開放吧。下面這個例子是一個很好的詮釋:
當然,最好遵守上面的那些原則上的原則。

class Foo:
    classname  = "Foo"
    def __init__(self,name):
        self.name = name

    def f1(self):
        print(self.name)

    @staticmethod
    def f2():
        print("static  and",Foo.classname)

    @classmethod
    def f3(cls):
        cls.f1(f)
        print(cls.classname)

if __name__ == '__main__':
    f = Foo("李")
    f.f1()
    f.f2()
    f.f3()
    print("----------")
    Foo.f1(f)
    Foo.f2()
    Foo.f3()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章