python中的實例方法、類方法、靜態方法的區別


Python 除了擁有實例方法外,還擁有靜態方法和類方法,跟Java相比需要理解這個類方法的含義。

  1. class Foo(object):  
  2.     def test(self)://定義了實例方法  
  3.         print("object")  
  4.     @classmethod  
  5.     def test2(clss)://定義了類方法  
  6.         print("class")  
  7.     @staticmethod  
  8.     def test3()://定義了靜態方法  
  9.         print("static")  
  • 實例方法訪問方式:
  1. ff.test();//通過實例調用  
  2. Foo.test(ff)//直接通過類的方式調用,但是需要自己傳遞實例引用  
  • 類方法訪問方式:
  1. Foo.test2();  
如果Foo有了子類並且子類覆蓋了這個類方法,最終調用會調用子類的方法並傳遞的是子類的類對象。
  1. class Foo2(Foo):  
  2.     @classmethod  
  3.     def test2(self):  
  4.         print(self)  
  5.         print("foo2 object")  
  6. f2=Foo2()  
  7. print(f2.test2())  
輸出結果:
  1. <class '__main__.Foo2'>  
  2. foo2 object  
  • 靜態方法調用方式:

 靜態方法就跟普通的Java靜態方式一樣

  1. ff=Foo();<pre name="code" class="python">ff.test3();//使用實例調用  
Foo.test3();//直接靜態方式調用

 

  • 總結

其實通過以上可以看出:

  實例方法,類方法,靜態方法都可以通過實例或者類調用,只不過實例方法通過類調用時需要傳遞實例的引用(python 3可以傳遞任意對象,其他版本會報錯)。

三種方法從不同層次上來對方法進行了描述:實例方法針對的是實例,類方法針對的是類,他們都可以繼承和重新定義,而靜態方法則不能繼承,可以認為是全局函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM