技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> classmethod和staticmethod的区别

classmethod和staticmethod的区别

浏览:1142次  出处信息

   今天读代码的时候发现Python的class定义中提及了@classmethod修饰符,然后查阅了一些材料一探究竟,先做个总结吧。

   在Python中提到 classmethod 就要提到 staticmethod,不是因为二者有什么关系,而是为了让用户区分以便更清楚地写代码。在C++中,我们了解直接通过类名访问的函数称为类的静态函数,即static修饰的函数,可见C++中classmethod和staticmethod是一个概念。

   那么python中二者有什么区别呢?先来看下二者如何在python代码中声明:

   class MyClass:

       …

       @classmethod  # classmethod的修饰符

       def class_method(cls, arg1, arg2, …):

           …

       @staticmethod  # staticmethod的修饰符

       def static_method(arg1, arg2, …):

           …

   对于classmethod的参数,需要隐式地传递类名,而staticmethod参数中则不需要传递类名,其实这就是二者最大的区别。

   二者都可以通过类名或者类实例对象来调用,因为强调的是classmethod和staticmethod,所以在写代码的时候最好使用类名,良好的编程习惯吧。

   对于staticmethod就是为了要在类中定义而设置的,一般来说很少这样使用,可以使用模块级(module-level)的函数来替代它。既然要把它定义在类中,想必有作者的考虑。

   对于classmethod,可以通过子类来进行重定义。

   提到类级别的函数,也顺带提及类级别的变量

   class MyClass:

       i = 123 # class-level variable

       def __init__(self):

           self.i = 456 # object-level variable

           …

       …

   为了清晰地区分上面两个i,最好的办法就是考虑到python中的一切都是object,所以i=123属于class object的,i=456属于class instance object

建议继续学习:

  1. 配置Nginx+uwsgi更方便地部署python应用    (阅读:105407)
  2. 如何成为Python高手    (阅读:53413)
  3. python实现自动登录discuz论坛    (阅读:31597)
  4. python编程细节──遍历dict的两种方法比较    (阅读:19007)
  5. 每个程序员都应该学习使用Python或Ruby    (阅读:16278)
  6. 30分钟3300%性能提升――python+memcached网页优化小记    (阅读:12142)
  7. 使用python爬虫抓站的一些技巧总结:进阶篇    (阅读:12124)
  8. 我的PHP,Python和Ruby之路    (阅读:11854)
  9. Python处理MP3的歌词和图片    (阅读:8331)
  10. 关于使用python开发web应用的几个库总结    (阅读:7450)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1