Python的方法主要有3個,即靜態方法(staticmethod),類方法(classmethod)和實例方法,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def
foo(x):
print
"executing foo(%s)"
%
(x)
class
A(
object
):
def
foo(
self
,x):
print
"executing foo(%s,%s)"
%
(
self
,x)
@classmethod
def
class_foo(
cls
,x):
print
"executing class_foo(%s,%s)"
%
(
cls
,x)
@staticmethod
def
static_foo(x):
print
"executing static_foo(%s)"
%
x
a
=
A()
|
這個self和cls是對類或者實例的綁定,對於一般的函數來說我們可以這么調用foo(x)
,這個函數就是最常用的,它的工作跟任何東西(類,實例)無關.對於實例方法,我們知道在類里每次定義方法的時候都需要綁定這個實例,就是foo(self, x)
,為什么要這么做呢?因為實例方法的調用離不開實例,我們需要把實例自己傳給函數,調用的時候是這樣的a.foo(x)
(其實是foo(a, x)
).類方法一樣,只不過它傳遞的是類而不是實例,A.class_foo(x)
.注意這里的self和cls可以替換別的參數,但是python的約定是這倆,還是不要改的好.
對於靜態方法其實和普通的方法一樣,不需要對誰進行綁定,唯一的區別是調用的時候需要使用a.static_foo(x)
或者A.static_foo(x)
來調用.