详解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 dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
python3+PyQt5实现拖放功能
Apr 24 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
python实现多进程代码示例
Oct 31 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
超简单的Python HTTP服务
Jul 22 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Numpy之reshape()使用详解
Dec 26 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
2016/09/08 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
了解AppleTalk协议吗
2014/04/01 面试题
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
恐龙的灭绝教学反思
2014/02/12 职场文书
关于保护环境的建议书
2014/08/26 职场文书
重阳节标语大全
2014/10/07 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
七夕情人节问候语
2015/11/11 职场文书
小学体育课教学反思
2016/02/16 职场文书
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS
SQL SERVER存储过程用法详解
2022/02/24 SQL Server