详解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 相关文章推荐
pymssql数据库操作MSSQL2005实例分析
May 25 Python
python线程、进程和协程详解
Jul 19 Python
Python 迭代器与生成器实例详解
May 18 Python
详谈Python高阶函数与函数装饰器(推荐)
Sep 30 Python
Python制作词云的方法
Jan 03 Python
深入浅析Python中的yield关键字
Jan 24 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
Python UnboundLocalError和NameError错误根源案例解析
Oct 31 Python
python挖矿算力测试程序详解
Jul 03 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
Python学习之路安装pycharm的教程详解
Jun 17 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
python实现每次处理一个字符的三种方法
2014/10/09 Python
python简单分割文件的方法
2015/07/30 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
优秀经理事迹材料
2014/02/01 职场文书
创建文明城市标语
2014/06/16 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
离职证明标准格式
2014/09/15 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
MySQL开启事务的方式
2021/06/26 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
Vue2.0搭建脚手架
2022/03/13 Vue.js
Nginx配置之禁止指定IP访问
2022/05/02 Servers