静态方法和类方法不同于一般的实例方法的地方在于,他们的第一个参数不是self(self本身就代表实例的意思,他们不是实例方法,所以不需要把self传进去作为第一个参数),这两个方法都既可以被类本身调用,也可以被类的实例调用
静态方法就是单纯的方法,它们是类定义的一部分。不需要实例作为它们的第一个参数。
class TestStaticMethod:
def foo(): #无参数,无self
print 'calling static method foo()'
foo = staticmethod(foo)
#使用@staticmethod写法
lass TestStaticMethod:
@staticmethod
def foo(): #无参数,无self
print 'calling static method foo()'
>>>tsm = TestStaticMethod()
>>>TestStaticMethod.foo() #被类本身调用
calling static method foo()
>>>tsm.foo() #被类的实例调用
calling static method foo()
普通方法需要一个实例作为第一个参数,并且随着方法的被调用(invocation),self会被自动传递给方法。对于类方法,类是需要作为第一个参数,并且被编译器自动传入方法。类不必特意被命名为像self这样的名字,但大多数人使用cls作为变量名。
class TestClassMethod:
def foo(cls): #参数cls
print 'calling class method foo()'
print 'foo() is part of class:',cls.__name__
foo = classmethod(foo)
#使用@classmethod写法
class TestClassMethod:
@classmethod
def foo(cls): #参数cls
print 'calling class method foo()'
print 'foo() is part of class:',cls.__name__
>>>tcm = TestClassMethod()
>>>TestClassMethod.foo() #被类本身调用
calling class method foo()
foo() is part of class:TestClassMethod
>>>tcm.foo() #被类的实例调用
calling class method foo()
foo() is part of class :TestClassMethod #这里被类的实例调用仍然返回基类本身名字
主要内容出自《python核心编程 第二版》