详解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库urllib与urllib2主要区别分析
Jul 13 Python
Python中几种操作字符串的方法的介绍
Apr 09 Python
Python实现学生成绩管理系统
Apr 05 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
Django框架实现逆向解析url的方法
Jul 04 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 Python
python神经网络 使用Keras构建RNN训练
May 04 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/11/11 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
Python获取文件所在目录和文件名的方法
2017/01/12 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
numpy中的高维数组转置实例
2018/04/17 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
python各类经纬度转换的实例代码
2019/08/08 Python
python 初始化一个定长的数组实例
2019/12/02 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
幽灵公主观后感
2015/06/09 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫