1. 程式人生 > >Python的例項方法、類方法和靜態方法之間的區別與聯絡

Python的例項方法、類方法和靜態方法之間的區別與聯絡

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

class Test:
    def test1(self):
        print('test......')

    @classmethod
    def test2(cls):
        print('test2......classmethod')

    @staticmethod
    def test3():
        print('test3......staticmethod')

t = Test()

t.test1()
t.test2()
t.test3()

# 類訪問例項方法時,必須要把例項物件作為引數傳進去.
Test.test1(t)
Test.test2()
Test.test3()

執行結果:

test......
test2......classmethod
test3......staticmethod
test......
test2......classmethod
test3......staticmethod

在類裡面定義的函式就是方法,類方法需要@ classmethod 修飾並且有個隱藏引數 cls,例項方法必須有個引數 self, 靜態方法必須有 @staticmethod修飾。

類和例項都可以訪問類方法、例項方法和靜態方法,唯一需要注意的是:類訪問例項方法時需要帶引數self.

在類方法中,不管是使用例項還是類呼叫方法,都會把類作為第一個引數傳遞進來,這個引數就是類本身。如果繼承了這個使用類方法的類,該類的所有子類都會擁有了這個方法,並且這個方法會自動指向子類本身,這個特性在工廠函式中是非常有用的。靜態方法是和類與例項都沒有關係的,完全可以使用一般方法代替,但是使用靜態方法可以更好的組織程式碼,防止程式碼變大後變得比較混亂。類方法是可以替代靜態方法的。靜態方法不能在繼承中修改。