在C++的类中,有两种函数:普通成员函数和静态成员函数,差别是成员函数通过类实例调用,而静态成员函数通过类名调用。本质上,成员函数在调用的时候会默认把this指针作为第一个参数传入,而静态成员函数不需要绑定this指针。
在python的类设计中,可以说将C++的这种隐式行为显式的表达出来了。
class Test(object):
def __init__(self):
pass
def func1(self):
pass
@classmethod
def func2(cls):
pass
@staticmethod
def func3();
pass
普通实例成员函数在调用时会绑定self参数(也就是调用它的那个实例的引用)
类方法会绑定类名
静态方法完全不绑定
注意静态方法和类方法的定义需要向上面那样使用函数修饰符。当然你也可能在老代码里看到这种做法(是等效的):
class Test(object):
def __init__(self):
pass
def func1(self):
pass
def func2(cls):
pass
func2 = classmethod(func2)
def func3():
pass
func3 = staticmethod(func3)