python中的普通方法 類方法和靜態方法的區別

2021-09-25 09:04:26 字數 882 閱讀 2389

面試中遇到這個問題,現在來總結一下

普通方法:預設有個self引數,只有類的物件可以呼叫

類方法:需要加上@classmethod裝飾器,預設cls引數,可以被類和物件呼叫

靜態方法:用@staticmethod裝飾器,類的靜態方法沒有引數,可以直接使用類名呼叫

不管是普通方法還是類方法,預設的self和cls引數都是可以自定義的,不過一般都是使用預設。

class test(object):

def method(self):

print("這是普通方法")

@classmethod

def classmethod(cls):

print("這是類方法")

@staticmethod

def staticmethod():

print("這是靜態方法")

我們測試一下

首先適用物件呼叫

使用類名直接呼叫

我們發現普通方法是不可以直接使用類名呼叫的

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

Python普通方法 靜態方法 類方法

coding utf 8 普通方法,類方法,靜態方法的區別 metaclass type class tst name tst data this is data 普通方法 defnormalmethod self,name print self.data,name 類方法,可以訪問類屬性 clas...

Python普通方法 靜態方法 類方法

普通方法,類方法,靜態方法的區別 metaclass type class tst name tst data this is data 普通方法 def normalmethod self,name print self.data,name 類方法,可以訪問類屬性 classmethod def ...

Python普通方法 靜態方法 類方法

coding utf 8 普通方法,類方法,靜態方法的區別 metaclass type class tst name tst data this is data 普通方法 defnormalmethod self,name print self.data,name 類方法,可以訪問類屬性 clas...