详解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中的数字类型及基本的数学计算
Mar 11 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
Python的argparse库使用详解
Oct 09 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
django框架之cookie/session的使用示例(小结)
Oct 15 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
python退出循环的方法
Jun 18 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
python Yaml、Json、Dict之间的转化
Oct 19 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 Python
Python加载数据的5种不同方式(收藏)
Nov 13 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
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
javascript import css实例代码
2008/07/18 Javascript
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
2016/12/21 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
Python实现获取操作系统版本信息方法
2015/04/08 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
浅谈Python的list中的选取范围
2018/11/12 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Pytorch之contiguous的用法
2019/12/31 Python
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
实习护士自我鉴定
2013/10/13 职场文书
医院工作检讨书范文
2014/02/10 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
财务简历的自我评价
2014/03/05 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
鼓舞士气的口号
2014/06/16 职场文书
应急处置方案
2014/06/16 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书