我们先来简单谈谈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
转载于:https://blog.51cto.com/ninakesi/1706906