Python的classmethod和staticmethod区别

classmethod:类方法
statisticmethod:静态方法

在python中,静态方法和类方法都可以通过类对象和类对象实例访问,但是区别是:
  • @classmethod是一个函数修饰符,它表示接下来是一个类方法,而对于平常我们见到则叫做实例方法。 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。 普通对象方法至少需要一个self参数,代表类对象的实例。
  • 类方法有类变量cls传入,从而可以用cls做一些相关的处理。如有子类继承时,调用该类方法时,传入的类变量是cls子类,而非父类。
  • 对于类方法,可以通过类来调用,就像test.print_cls(),类似于C++中的静态方法,也可以通过实例来调用,即ee.print_self()。
  • 静态方法,基本跟一个全局函数相同,用的较少。
   
   class test(object):
    a = 1
    b = 2
    def __init__(cls, b):
        cls.b = b
    @classmethod
    def add_a(cls):
        cls.a += 1
        print cls.a
    @classmethod
    def add_b(cls):
        cls.b += 1
        print cls.b
    def minusb(self):
        self.b -= 1
        print self.b
    def print_self(self):
        print "self.a=%s" % self.a
        print "self.b=%s" % self.b
    @classmethod
    def print_cls(cls):
        print "cls.a=%s" % cls.a
        print "cls.b=%s" % cls.b
    @staticmethod
    def static_print():
        print "static_print is called!"
 
   test.a = 100
   ee = test(2)
   print ee.a
   ee.minusb()
   ee.add_b()
   test.print_cls()
   ee.print_self()

输出结果:
100
1
3
cls.a=100
cls.b=3
self.a=100
self.b=1
static_print is called!

如例子,   def add_a(cls) 即为类方法,可以通过类名直接调用的,并且作为一种属性赋加给该类及其实例。
  def print_self(self)为实例方法,平常见得最多。

参考文献:
http://www.cnblogs.com/chenzehe/archive/2010/09/01/1814639.html

你可能感兴趣的:(python脚本)