详解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导入txt数据到mysql的方法
Apr 08 Python
Python实现的桶排序算法示例
Nov 29 Python
Python读取txt某几列绘图的方法
Oct 14 Python
Python读取xlsx文件的实现方法
Jul 04 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
python微信公众号开发简单流程实现
Mar 09 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
通俗讲解python 装饰器
Sep 07 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 Python
Python实现批量自动整理文件
Mar 16 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
python中for用来遍历range函数的方法
2018/06/08 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
关于python字符串方法分类详解
2019/08/20 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
keras打印loss对权重的导数方式
2020/06/10 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
java字符串格式化输出实例讲解
2021/01/06 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
什么是组件架构
2016/05/15 面试题
24岁生日感言
2014/01/13 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书