Python中的靜態方法和類方法區別

2021-08-28 19:34:07 字數 1672 閱讀 9375

1.類的方法第乙個引數必須是 self並且如果要呼叫類的方法,必須將通過類的例項,即方法繫結例項後才能由例項呼叫如果不繫結,一般在繼承關係的類之間,可以用 super 函式等方法呼叫。

2.這裡再介紹一種方法,這種方法的呼叫方式跟上述的都不同,這就是:靜態方法和類方法

看**:

__metaclass__ = type

class staticmethod:

@staticmethod

def foo():

print("this is static method foo().")

class classmethod:

@classmethod

def bar(cls):

print("this is class method bar()")

print("bar() is part of class:", cls.__name__)

if __name__ == "__main__":

static_foo = staticmethod() # 例項化

static_foo.foo() # 例項呼叫靜態方法

staticmethod.foo() # 通過類來呼叫靜態方法

print("*****")

class_bar = classmethod()

class_bar.bar()

classmethod.bar()

執行結果:

this is static method foo().

this is static method foo().

*****

this is class method bar()

bar() is part of class: classmethod

this is class method bar()

bar() is part of class: classmethod

@staticmethod 表示下面的方法是靜態方法。

@classmethod 表示下面的方法是類方法

先看靜態方法,雖然名為靜態方法,但也是方法,所以,依然用 def 語句來定義。需要注意的是檔名後面的括號內,沒有 self,這和前面定義的類中的方法是不同的,也正是因著這個不同,才給它另外取了乙個名字叫做靜態方法,否則不就「泯然眾人矣」。如果沒有 self,那麼也就無法訪問例項變數、類和例項的屬性了,因為它們都是借助 self 來傳遞資料的。

再看類方法,同樣也具有一般方法的特點,區別也在引數上。類方法的引數也沒有 self但是必須有 cls 這個引數。在類方法中,能夠訪問類屬性,但是不能訪問例項屬性。

簡要明確兩種方法。兩種方法都可以通過例項呼叫即繫結例項。也可以通過類來呼叫即 staticmethod.foo() 這樣的形式,這也是區別一般方法的地方,一般方法必須用通過繫結例項呼叫。

python中靜態方法和類方法

方法是作為類屬性儲存的函式 def get size self pass在python2,3中的不同點。2 pizza.get size 會報乙個未繫結的函式的錯誤 3 pizza.get size 會報乙個缺少引數的錯誤,即,python3可以動態的傳入方法所屬於的類的任意乙個例項 靜態方法 靜態...

python 類的靜態方法和類方法

1.靜態方法 使用 staticmethod修飾 不需要傳入引數,類和類的例項物件都可以呼叫 沒有引數的方法,如果未宣告靜態方法的話,例項物件呼叫將會出錯 1class a staticmethod 宣告靜態方法 def printa 無需引數 print a a.printa 類名直接呼叫 a a...

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

一 例項方法 先定義乙個輸出日期的類date,後面內容都是基於此類進行拓展。class date def init self,year,month,day self.year year self.month month self.day day def str self return format ...