python中的函数调用绑定,静态方法和类方法

在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)