详解python中静态方法staticmethod用法
作者:IT之一小佬 发布时间:2023-08-31 07:56:31
在开发的时候, 可以使用类对方法进行封装,如果某一个方法需要访问到对象的实例属性,可以把这个方法封装成一个实例方法。如果某一个方法不需要访问对象的实例属性,但是需要访问到类的类属性,这个时候就可以考虑把这个方法封装成一个类方法。一个实例方法, 一个类方法,这是两种方法类型,但是在开发中还有一种情况,如果要封装的某一个方法,既不需要访问到对象的实例属性,也不需要访问类的类属性,这个时候就可以考虑把这个方法封装成一个静态方法。
在开发中,如果类中的某个方法既不需要访问实例属性或者调用实例方法,同时也不需要访问类属性或者调用类方法,这个时候就可以把这个方法封装成静态方法。需要在def关键字上方增加一个静态方法的修饰符,@staticmethod。
语法格式如下:
@staticmethod
def 静态方法名():
pass
在Python里面静态方法和我们平时写的函数def是一样的。唯一不同之处就是它可以存在于类中,不同实例化类也可以调用。
需要通过装饰器 @staticmethod 来进行修饰, 静态方法既不需要传递类对象也不需要传递实例对象(形参没有self/cls ) 。
静态方法 也能够通过 实例对象 和 类对象 去访问。
当方法中 既不需要使用实例对象 ( 如实例对象,实例属性 ) , 也不需要使用类对象 ( 如类属性、类方法、创建实例等) 时,定义静态方法
取消不需要的参数传递 ,有利于 减少不必要的内存占存和性能消耗。
示例代码:
class Dog(object):
@staticmethod
def info_print():
print('这是⼀个狗类,⽤于创建狗实例....')
wangcai = Dog()
# 静态⽅法既可以使⽤对象访问⼜可以使⽤类访问
wangcai.info_print()
Dog.info_print()
运行结果:
在类中编写静态方法和类的普通方法
class Static(object):
@staticmethod
def test_static():
print('I am staticmethod')
def test_def(self):
print('I am not staticmethod')
# 调用静态方法
Static.test_static()
# 实例化调用静态方法
obj = Static()
obj.test_static()
运行结果:
从上述代码和运行结果可以看出静态方法可以直接被调用,且不用加任何参数、self也不要。静态方法存在的意义其实就是让函数归类,紧耦合。
在类对象中定义的静态方法:
class MyClass(object):
# 在类对象中定义的静态方法
@staticmethod
def tom(age, weight): # 没有 self
print(age, weight)
@classmethod
def get_info(cls):
# 通过类对象调用类方法
MyClass.tom(25, 66)
def my_info(self):
# 通过实例对象调用静态方法
self.tom(26, 77)
# 通过类对象调用静态方法
MyClass.tom(23, 55) # 23 55
# 实例化
mc = MyClass()
# 通过实例对象调用静态方法
mc.tom(24, 65) # 24 65
# 通过类对象调用类方法
mc.get_info() # 25 66
mc.my_info() # 26 77
运行结果:
实例方法、类方法、静态方法综合例子
class MyClass(object):
def __init__(self, name):
self.name = name
def get_info(self): # 定义实例方法,有 self 参数
print("实例方法")
@classmethod
def get_other(cls): # 定义实例方法,有 cls 参数
print("类方法")
@staticmethod
def get_my_class(): # 定义静态方法,无默认参数
print("静态方法")
# 实例化
mc = MyClass("tom")
# 调用实例方法
mc.get_info() # 实例方法
# 调用类方法,建议通过 类对象.类方法([实参]) 方法调用
MyClass.get_other() # 类方法
# 调用静态方法,建议通过 类对象.类方法([实参]) 方法调用
MyClass.get_my_class() # 静态方法
运行结果:
来源:https://blog.csdn.net/weixin_44799217/article/details/125967662
猜你喜欢
- 前言上篇文章给大家带来了PHP中最基本的特性,不知道大家学习的怎样了,回顾上文,我们讲了MD5强弱碰撞以及正则匹配的绕过,总体来看还是很简单
- 阅读《YUI学习笔记(1)》YAHOO.lang.dump 与 YAHOO.lang.substitute。1.&nbs
- 这段时间写了很多页面代码,除了一些知识重复以外,也学到css的一些新东西,或许是旧东西,但是还是希望能对大家有用。其实在css里面有很多对a
- 我们在上传大文件时,可能会由于服务器的原因导致文件上传失败,文件过大时由于服务器的配置或响应事件过长导致上传文件失败,这时候我们可以将一个大
- 比如:我们导入了某个客户的资料,我们知道此客户的姓名是ZhangShan,我们想知道,在我们的业务数据库(eg:NorthWind)中,有哪
- 如果只是因为浏览者改变了浏览器的设置,或者因为浏览器不兼容,使自己精心制作的网页变得“面目全非”,那多令人沮丧!下面我们以网页爱好者的常用工
- 如何修改被表单引用的ASP页面?formhandler.asp<HTML><BODY BGCOLOR="
- 今天新能测试组的同事找我看一个奇怪的现象。一个tomcat应用,里面只有一个单纯的jsp页面,而且这个jsp页面没有任何java代码(想用这
- 一般情况下,访问或设置剪贴板,IE 只需使用 window.clipboardData 的 getData 或 setData 方法即可。M
- 首先,我要在这里写上一些很官方的概念,意在说明面向对象是很具体化的,很实体的模式,不能让有些人看见“对象&rdq
- 当我们想复制两个一模一样的列表时,我们可能使用到list.copy()这个方法,这个方法可以让我们复制一个相同的数组,当遇到下面这种情况时,
- 一:操作session1:session配置Session 的配置文件存储在config/session.php中,配置参数有:(1):配置
- 概述编程的内核是数学,而测试的本质是计算,专业名词叫容量预估,而测试的大体就是用程序模拟程序,检测程序的正确性,有两个点需要注意,QPS最佳
- 当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。通常情况下,如果在WHERE
- 上一次,我们谈到在ASP中如何利用“正则表达式”对象来实现各种数据的校验,文中描述了正则表达式对象的强大功能,接下来,我们来看看有关“正则表
- PyQt5不规则窗口实现动画效果实例import sysfrom PyQt5.QtCore import *from PyQt5.QtGui
- 从PHP生成HTML静态页面并存储到以年份和月份为名称创建的目录。读取全部数据批量生成,全部生成后弹出提示。可指定批次生成数量,建议不超过8
- ExpiresAbsolute 属性指定缓存于浏览器中的页的到期日期和时间语法Response.ExpiresAbsolute [
- 通过pyshp库,可以读写Shapefile文件,查询相关信息,github地址为https://github.com/Geospatial
- 话不多说,请看代码:<?phpdate_default_timezone_set("PRC"); error_re