我们先来简单谈谈python类中一般方法、静态方法和类方法的区别。

1、类中的一般方法

    一般方法在定义的时候,需要有表示类实例的参数(通常以self表示,例如def foo(self,arg1,arg2……)),一般方法不能通过类名.方法名()来调用,必须先创建类的实例,然后通过实例.方法名()来调用。

2、类中的静态方法

    类中的静态方法用“@staticmethod”来修饰,静态方法在定义的时候,不需要表示类的实例,可想类外的方法定义一样。静态方法可以通过类名.方法名()实例.方法名()调用。

3、类中的类方法

    类方法用“@classmethod”来修饰,类方法在定义的时候,需要有表示类对象的参数。类方法也可以通过类名.方法名()实例.方法名()调用。(注意:python中,类也是一个对象,这里所说的类对象是指类本身,而非类实例化得对象)


下面我们来看看实际例子:

首先,定义一个类:

class TestMethod(object):  #一般方法、静态方法和类方法与是否新式类无关,这里我们举例用了新式类,但要注意,以下分析同样适用于经典类

    def test(self):        #这里的self参数是必须的,它表示一个类的实例,但并不一定要用字符串“self”来表示,可以用任意字符表示,只是我们通常使用self表示
        print("object") 
        
    @classmethod
    def test2(clss):       #这里的clss参数意思必须的,它表示一个类对象,通常该形参我们中“cls”表示
        print("class")
        
    @staticmethod
    def test3():           #这里可以不需要任何形参
        print("static")

首先我们用类名.方法名()来调用:

结果如下:

>>> TestMethod.test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method test() must be called with TestMethod instance as first argument (got nothing instead)
>>> TestMethod.test2()
class
>>> TestMethod.test3()
static

可以看到,一般方法test()调用异常,必须通过实例来调用


接着我们再用实例调用:

>>> t = TestMethod()
>>> t.test()
object
>>> t.test2()
class
>>> t.test3()
static