Python 除了擁有實例方法外,還擁有靜態方法和類方法,跟Java相比需要理解這個類方法的含義。
- class Foo(object):
- def test(self)://定義了實例方法
- print("object")
- @classmethod
- def test2(clss)://定義了類方法
- print("class")
- @staticmethod
- def test3()://定義了靜態方法
- print("static")
- 實例方法訪問方式:
- ff.test();//通過實例調用
- Foo.test(ff)//直接通過類的方式調用,但是需要自己傳遞實例引用
- 類方法訪問方式:
- Foo.test2();
- class Foo2(Foo):
- @classmethod
- def test2(self):
- print(self)
- print("foo2 object")
- f2=Foo2()
- print(f2.test2())
- <class '__main__.Foo2'>
- foo2 object
- 靜態方法調用方式:
靜態方法就跟普通的Java靜態方式一樣
- ff=Foo();<pre name="code" class="python">ff.test3();//使用實例調用
- 總結
其實通過以上可以看出:
實例方法,類方法,靜態方法都可以通過實例或者類調用,只不過實例方法通過類調用時需要傳遞實例的引用(python 3可以傳遞任意對象,其他版本會報錯)。
三種方法從不同層次上來對方法進行了描述:實例方法針對的是實例,類方法針對的是類,他們都可以繼承和重新定義,而靜態方法則不能繼承,可以認為是全局函數。