详解Python中的静态方法与类成员方法

作者:乘物游心 时间:2022-08-02 23:30:16 

前言

因为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参数;

  • 静态方法是无妨访问实例变量和类变量的,类成员方法无法访问实例变量但是可以访问类变量

使用的区别:

由于静态方法无法访问类属性,实例属性,相当于一个相对独立的方法,跟类其实并没有什么关系。这样说来,静态方法就是在类的作用域里的函数而已。

总结

好了,以上就是这篇文章的全部内容了,最后,如何在实际的项目中使用静态方法和类方法,这个等一段时间有更深的体会再和大家交流吧。希望本文的内容对大家的学习或者工作能带来一定的帮助。

来源:http://blog.spoock.com/2016/09/18/python-classmethod-and-staticmethod/

标签:python,静态方法,类成员方法
0
投稿

猜你喜欢

  • php 文件缓存函数

    2023-11-06 15:28:47
  • ASP 调用带参数输出的COM接口

    2011-03-17 10:59:00
  • pytorch常见的Tensor类型详解

    2022-10-25 19:34:01
  • Python实现发送QQ邮件的封装

    2022-10-08 21:19:56
  • Python+OpenCV绘制灰度直方图详解

    2023-06-09 18:50:50
  • 数据库中聚簇索引与非聚簇索引的区别[图文]

    2012-02-25 19:38:23
  • Python Web框架Tornado运行和部署

    2021-04-14 09:17:57
  • Python Pandas 删除列操作

    2023-12-17 22:03:53
  • asp之让Session永不过期

    2011-04-15 10:42:00
  • python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例

    2021-01-14 10:20:29
  • python变量赋值机制踩坑记录

    2021-08-19 08:59:44
  • 详解Python命令行解析工具Argparse

    2022-12-11 15:49:28
  •  python中字符串的常见操作总结(二)

    2023-04-08 17:17:35
  • Golang多线程刷票的实现代码

    2024-02-05 23:08:47
  • python中pd.Series()函数的使用

    2023-10-04 08:28:05
  • SQL Server 分页查询通用存储过程(只做分页查询用)

    2024-01-12 20:10:11
  • linux下python中文乱码解决方案详解

    2023-09-01 03:53:04
  • selenium+opencv实现滑块验证码的登陆

    2022-03-28 06:49:04
  • golang copy函数使用的坑

    2023-07-09 19:53:44
  • Js nodeType 属性全面解析

    2024-04-16 09:53:30
  • asp之家 网络编程 m.aspxhome.com