详解Python中的静态方法与类成员方法


Posted in Python onFebruary 28, 2017

前言

因为Python的水平目前一直是处于能用阶段,平时写的脚本使用的Python的写法也比较的简单,没有写过稍微大一点的项目。对Python中的类,类之间的组织关系,整个项目中类之间如何耦合还缺乏认识。打算读一读别人写的Python代码来学习一下Python在工程中的应用,提升自己的技术水平。选取的Python代码是Python爬虫代码,github地址。这个代码刚好是符合跳出我的舒适区的水平的代码,因此很适合我目前的水平来学习。

在Python2.4之后,主要使用装饰器来实现静态方法和类方法。

装饰器使用@操作符,例子如下:

class Example:
 val1 = "Value 1"
 def __init__(self):
 self.val2 = "Value 2"

 @staticmethod
 def staticmd():
 print("静态方法,无法访问Value1和Value2")

 @classmethod
 def classmd(cls):
 print('类方法,类:'+str(cls)+",val1:"+cls.val1+",无法访问val2的值")


example = Example()
example.staticmd() #实例调用静态方法,无法访问实例变量val1和val2
example.classmd() #实例调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:Value 1,无法访问val2的值
Example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:Value 1,无法访问val2的值
example.val1 = "The instance value1 changed"
example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:Value 1,无法访问val2的值
Example.val1 = "The class value2 changed"
example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:The class value2 changed,无法访问val2的值
Example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:The class value2 changed,无法访问val2的值

相信从上面的例子中,就可以很明显地分辨出静态方法和类方法的区别了。

先是在语法上面的区别:

  • 静态方法不需要传入self参数,类成员方法需要传入代表本类的cls参数;
  • 静态方法是无妨访问实例变量和类变量的,类成员方法无法访问实例变量但是可以访问类变量

使用的区别:

由于静态方法无法访问类属性,实例属性,相当于一个相对独立的方法,跟类其实并没有什么关系。这样说来,静态方法就是在类的作用域里的函数而已。

总结

好了,以上就是这篇文章的全部内容了,最后,如何在实际的项目中使用静态方法和类方法,这个等一段时间有更深的体会再和大家交流吧。希望本文的内容对大家的学习或者工作能带来一定的帮助。

Python 相关文章推荐
Python中AND、OR的一个使用小技巧
Feb 18 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python优先队列实现方法示例
Sep 21 Python
使用memory_profiler监测python代码运行时内存消耗方法
Dec 03 Python
用Python实现大文本文件切割的方法
Jan 12 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
pytorch sampler对数据进行采样的实现
Dec 31 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
tensorflow tf.train.batch之数据批量读取方式
Jan 20 Python
python输出数学符号实例
May 11 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
python基于itchat实现微信群消息同步机器人
Feb 27 #Python
不要用强制方法杀掉python线程
Feb 26 #Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 #Python
python检查URL是否正常访问的小技巧
Feb 25 #Python
python解析基于xml格式的日志文件
Feb 25 #Python
Python中防止sql注入的方法详解
Feb 25 #Python
Python 数据结构之旋转链表
Feb 25 #Python
You might like
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
JS实现页面侧边栏效果探究
2021/01/08 Javascript
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
python实现归并排序算法
2018/11/22 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
致400米运动员广播稿
2014/02/07 职场文书
公务员保密承诺书
2014/03/27 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
环境建议书
2015/02/04 职场文书
电影复兴之路观后感
2015/06/02 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
JavaScript实现简单图片切换
2021/04/29 Javascript
python单元测试之pytest的使用
2021/06/07 Python
JavaScript 数组去重详解
2021/09/15 Javascript