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實現了一定的靈活性使得類方法和靜態方法,都能夠被例項和類二者呼叫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2836382/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 初學Python過程中,例項方法和類方法的區別是什麼?Python
- Python中類方法和例項方法有什麼區別?Python
- python屬性和方法的區別是什麼Python
- python is和==的區別是什麼?Python
- Python中/與//的區別是什麼?其如何使用?Python
- python的模組和類有什麼區別Python
- Java 介面和抽象類是什麼,有什麼區別Java抽象
- 什麼是python?與PHP有什麼區別?PythonPHP
- Java和Python是什麼?有什麼區別?JavaPython
- Python中的類和物件是什麼Python物件
- 什麼是序列化?物件和類的區別?物件
- Python語言中/與//的區別是什麼?Python
- 類銀河惡魔城和類魂的區別是什麼?
- Go 中 make 與 new 的區別是什麼?Go
- 【Java面試】Mybatis中#{}和${}的區別是什麼?Java面試MyBatis
- python和c語言的區別是什麼PythonC語言
- Python 列表和元組的區別是什麼?Python
- opencv和Python的區別是什麼?Python開發!OpenCVPython
- 什麼是中斷?什麼是異常?它們有何區別?
- Python和C語言區別是什麼?PythonC語言
- pycharm和python區別(關係)是什麼PyCharmPython
- 深入探究Java中equals()和==的區別是什麼Java
- Laravel中 FeatureTest和 UnitTest的區別是什麼Laravel
- Java中equals與==的本質區別是什麼?Java
- Python和GO語言之間的區別是什麼?PythonGo
- Python 靜態方法和類方法的區別Python
- Python開發中TCP和UDP區別是什麼?Python入門教程PythonTCPUDP
- 什麼是PCB?什麼是PCBA?PCB和PCBA的區別?
- 什麼是Python直譯器?和Python IDE有什麼區別?PythonIDE
- MySQL、NoSQL分別是什麼?有什麼區別?MySql
- python新式類是什麼Python
- Linux中Vi和Vim區別是什麼?Linux
- cython和python分別是什麼?區別有哪些?Python
- Python和Go是什麼?它們之間有什麼區別?PythonGo
- Linux中什麼是打包?與歸檔有什麼區別?Linux
- http協議中,“get”和“post”的區別是什麼HTTP協議
- ajax中button和submit按鈕的區別是什麼MIT
- java面試題0001-區分類中過載方法的依據是什麼?Java面試題