标签:staticmethod python classmethod
我们先来简单谈谈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
浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)
标签:staticmethod python classmethod
原文地址:http://ninakesi.blog.51cto.com/9642768/1706906