详解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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
python实现排序算法
Feb 14 Python
Python的Django框架中模板碎片缓存简介
Jul 24 Python
详解python解压压缩包的五种方法
Jul 05 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
Python requests模块cookie实例解析
Apr 14 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
python3 循环读取excel文件并写入json操作
Jul 14 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 Python
使用Python开发冰球小游戏
Apr 30 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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python中的lambda表达式用法详解
2016/06/22 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
python实现简单成绩录入系统
2019/09/19 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
python基于opencv 实现图像时钟
2021/01/04 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
医学生实习自荐信
2013/10/01 职场文书
农民工创业典型事迹
2014/01/25 职场文书
集体生日活动方案
2014/08/18 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
党员作风建设自查报告
2014/10/23 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis