与普通的类方法有所不同的是,用@classmethod修饰的类方法不传入self实例本身,而是传入cls,代表这个类自身,可以来调用类的属性,类的方法,实例化对象等。

使用的语法也非常简单,直接在类方法上加上装饰器@classmethod即可,另外传入cls参数作为方法的第一个参数。

  1. class A(object):
  2. @classmethod
  3. def func(cls):
  4. pass
  1. class A(object):
  2. num = 1
  3. def func1(self):
  4. print('func1')
  5. @classmethod
  6. def func2(cls):
  7. print('func2')
  8. print(cls.num)
  9. cls().func1()
  10. if __name__ == '__main__':
  11. A.func2()
  12. ------------------------------
  13. >>> func2
  14. >>> 1
  15. >>> func1

使用@staticmethod修饰的类方法也被称为静态方法,此方法不传入代表实例对象的self参数,并且不强制要求传递任何参数,可以被类直接调用,当然实例化的对象也可以调用。

使用时直接在类方法上加上装饰器@staticmethod,参数不需要self,其他参数也是可选。

  1. class B(object):
  2. @staticmethod
  3. def func()
  4. pass
  1. class B(object):
  2. @staticmethod
  3. def func1():
  4. print('func1')
  5. @staticmethod
  6. def func2(a, b):
  7. print('func2')
  8. print('a=', a)
  9. print('b=', b)
  10. if __name__ == '__main__':
  11. B.func1()
  12. b = B()
  13. b.func1()
  14. B.func2(1, 2)
  15. ------------------------------
  16. >>> func1
  17. >>> func1
  18. >>> func2
  19. >>> a= 1
  20. >>> b= 2

版权声明:本文为luyuze95原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/luyuze95/p/11743511.html