详解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中将阿拉伯数字转换成中文的实现代码
May 19 Python
Python getopt模块处理命令行选项实例
May 13 Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
python识别验证码的思路及解决方案
Sep 13 Python
python跨文件使用全局变量的实现
Nov 17 Python
Pygame Draw绘图函数的具体使用
Nov 17 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
php调用mysql存储过程
2007/02/14 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
Python上下文管理器全实例详解
2019/11/12 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
如何学习Python time模块
2020/06/03 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
2015教师年度工作总结范文
2015/04/07 职场文书
辞职信格式范文
2015/05/13 职场文书
2015年中秋节主持词
2015/07/30 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
Win11更新失败并提示0xc1900101
2022/04/19 数码科技