详解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 从远程服务器下载东西的代码
Feb 10 Python
python实现提取百度搜索结果的方法
May 19 Python
python中__call__内置函数用法实例
Jun 04 Python
Python 正则表达式的高级用法
Dec 04 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
pyshp创建shp点文件的方法
Dec 31 Python
详解Python locals()的陷阱
Mar 26 Python
Django实现跨域的2种方法
Jul 31 Python
Django框架安装方法图文详解
Nov 04 Python
字典算法实现及操作 --python(实用)
Mar 31 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
Pytorch使用shuffle打乱数据的操作
May 20 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
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
修复IE9&amp;safari 的sort方法
2011/10/21 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
React实现全选功能
2020/08/25 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
[47:55]Ti4第二日主赛事败者组 NaVi vs EG 1
2014/07/20 DOTA
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
路政管理专业推荐信
2013/11/11 职场文书
物流仓储计划书
2014/01/10 职场文书
团组织关系介绍信
2014/01/12 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
善意的谎言事例
2014/02/15 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python