python中,類方法和靜態方法區別。

面相對象程序設計中,類方法和靜態方法是常常用到的兩個術語。python

 

邏輯上講:類方法是隻能由類名調用;靜態方法能夠由類名或對象名進行調用。.net

 

在C++中,靜態方法與類方法邏輯上是等價的,只有一個概念,不會混淆。設計

 

而在Python中,方法分爲三類實例方法、類方法、靜態方法。代碼以下:對象

 

 class Test(object):內存

 

 

    def InstanceFun(self):get

        print("InstanceFun");it

        print(self);程序設計

 

 

    @classmethodclass

    def ClassFun(cls):object

        print("ClassFun");

        print(cls);

 

 

    @staticmethod

    def StaticFun():

        print("StaticFun");

 

 

t = Test();       

t.InstanceFun();      # 輸出InstanceFun,打印對象內存地址「<__main__.Test object at 0x0293DCF0>」

Test.ClassFun();                       # 輸出ClassFun,打印類位置 <class '__main__.Test'>

Test.StaticFun();                        # 輸出StaticFun

t.StaticFun();                              # 輸出StaticFun

t.ClassFun();                             # 輸出ClassFun,打印類位置 <class '__main__.Test'>

Test.InstanceFun();                  # 錯誤,TypeError: unbound method instanceFun() must be called with Test instance as first argument

Test.InstanceFun(t);                 # 輸出InstanceFun,打印對象內存地址「<__main__.Test object at 0x0293DCF0>」

t.ClassFun(Test);                      # 錯誤   classFun() takes exactly 1 argument (2 given)   

 

    

 

能夠看到,在PYTHON中,兩種方法的主要區別在於參數。實例方法隱含的參數爲類實例self,而類方法隱含的參數爲類自己cls。
靜態方法無隱含參數,主要爲了類實例也能夠直接調用靜態方法。


  因此邏輯上類方法應當只被類調用,實例方法實例調用,靜態方法二者都能調用。主要區別在於參數傳遞上的區別,實例方法悄悄傳遞的是self引用做爲參數,而類方法悄悄傳遞的是cls引用做爲參數。

 

  Python實現了必定的靈活性使得類方法和靜態方法,都可以被實例和類兩者調用

相關文章
相關標籤/搜索