详解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的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
Python变量和字符串详解
Apr 29 Python
Python实现的计数排序算法示例
Nov 29 Python
python自定义时钟类、定时任务类
Feb 22 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
利用python 下载bilibili视频
Nov 13 Python
解决pytorch 保存模型遇到的问题
Mar 03 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框架的优缺点对比分析
2014/12/25 PHP
简述php环境搭建与配置
2016/12/05 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
Python函数参数操作详解
2018/08/03 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
200行python代码实现2048游戏
2019/07/17 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python3.4中清屏的处理方法
2020/07/06 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
银行求职推荐信范文
2013/11/30 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
产品包装策划方案
2014/05/18 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
优秀党员事迹材料
2014/12/18 职场文书
停发工资证明范本
2015/06/12 职场文书
经营场所使用证明
2015/06/19 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android