Python例項方法、類方法、靜態方法

weixin_33936401發表於2017-10-03

例項方法,類方法,靜態方法都可以通過例項或者類呼叫,只不過例項方法通過類呼叫時需要傳遞例項的引用(python 3可以傳遞任意物件,其他版本會報錯)

1. 例項方法針對的是例項,第一個引數是self,普通物件方法至少需要一個self引數,代表類物件例項;
2. 類方法針對的是類,@classmethod 它表示接下來的是一個類方法,類方法的第一個引數cls,它們都可以繼承和重新定義;
3. 靜態方法用於作為程式中的共享資源,直接通過類去呼叫,不用例項化物件,不需要self引數,可以認為是全域性函式,@staticmethod 它表示接下來的是一個靜態方法

示例:

class Test1(object):
    
#定義例項方法
    def test1(self):
        print "object"
#定義類方法
    @classmethod
    def test2(cls):
        print"class"

#定義靜態方法
    @staticmethod
    def test3():
        print "static"
        
#子類覆蓋父類的類方法
class Test2(Test1):
    
    @classmethod
    def test2(cls):
         print cls
         print "test2 object"
    
#例項方法呼叫-1
f1=Test1()#建立例項物件f1
f1.test1()#呼叫例項方法
#例項方法呼叫-2
Test1.test1(f1)#另一種呼叫例項的方法

print "-------------"

#類方法通過例項呼叫-1
f1.test2()
#類方法通過類呼叫-2(不需傳遞例項的引用)
Test1.test2()
print "-------------"

#靜態方法使用例項呼叫-1
f1.test3()
#靜態方法靜態方式呼叫-2
Test1.test3()
print "-------------"

Test2.test2() #如果子類覆蓋了父類的類方法,最終呼叫的是子類的類方法,並傳遞子類的類物件

執行結果如下:

4629563-939140ac2d1f949e.png
image.png
注意:

1.Python中嚴格區分大小寫。
2.如果子類覆蓋了父類的類方法,最終呼叫的是子類的類方法,並傳遞子類的類物件。

相關文章