详解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 MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
python远程连接服务器MySQL数据库
Jul 02 Python
解析PyCharm Python运行权限问题
Jan 08 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 Python
Python中的程序流程控制语句
Feb 24 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中执行cmd命令的方法
2014/10/11 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
js显示时间 js显示最后修改时间
2013/01/02 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
Python autoescape标签用法解析
2020/01/17 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
租赁协议书范本
2014/04/22 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
四查四看整改措施
2014/09/19 职场文书
大一新生检讨书
2014/10/29 职场文书
python munch库的使用解析
2021/05/25 Python
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript