當前位置:編程學習大全網 - 編程語言 - python靜態方法和類方法的區別

python靜態方法和類方法的區別

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

邏輯上講:類方法是只能由類名調用;靜態方法可以由類名或對象名進行調用。

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

而在Python中,方法分為三類實例方法、類方法、靜態方法。代碼如下:

class Test(object):

def InstanceFun(self):

print("InstanceFun");

print(self);

@classmethod

def ClassFun(cls):

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實現了壹定的靈活性使得類方法和靜態方法,都能夠被實例和類二者調用

  • 上一篇:淺談Docker的Image、Container、Registry
  • 下一篇:隊列狀態機的計時問題——急!
  • copyright 2024編程學習大全網