详解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多线程编程(一):threading模块综述
Apr 05 Python
深入理解Python中的内置常量
May 20 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
Dec 18 Python
Django中信号signals的简单使用方法
Jul 04 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
python实现简单反弹球游戏
Apr 12 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 强制下载文件实现代码
2013/10/28 PHP
PHP中each与list用法分析
2016/01/08 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
javascript模块化简单解析
2016/04/07 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
python连接mysql实例分享
2016/10/09 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
从0开始的Python学习016异常
2019/04/08 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
python中time、datetime模块的使用
2020/12/14 Python
mysql有关权限的表都有哪几个
2015/04/22 面试题
工程造价与管理专业应届生求职信
2013/11/23 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
五年级音乐教学反思
2014/02/06 职场文书
二手房购房意向书范本
2014/04/01 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
全新239军机修复记
2022/04/05 无线电