详解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


猜你喜欢
- go-cqhttp安装一、 简介1、 介绍官方文档地址:https://docs.go-cqhttp.org/各种框架都只是机器人的各种实现
- 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的
- 作为程序员,我们经常需要对时间进行处理。在 Go 中,标准库 time 提供了对应的能力。本文将介绍 time 库中一些重要的函数和方法,希
- 一、正则1.正则表达式定义正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一
- 常用的 random 模块方法import random# random.random()用于生成一个 0 到 1 的随机浮点数: 0 &l
- HTML表单是网站交互性的经典方式。 本章将介绍如何用Django对用户提交的表单数据进行处理。一、HTTP 请求HTTP协议以"
- mysql_query("set autocommit=0"); $list_one = $db->fetch_f
- 在后端有许多的封装方法来截取字符串或者对字符串的操作,同样前端也有相应的方法。有一个data数据为ipaddrdata() {
- MySQL是“世界上最为流行的开放性数据库”,至少对于MySQL Web站点会这样。但无论
- golang字符串比较的三种常见方法fmt.Println("go"=="go")fmt.Print
- 画一个地球想画一个转动的地球,那么首先要有一个球,或者说要有一个球面,用参数方程可以表示为x=rcosϕcosθy=rc
- JDBC,Java Database Connectivity,即 Java 数据库连接。实际上 JDBC 是 Java 中的一套和数据库进
- 创建项目scrapy startproject zhaoping创建爬虫cd zhaopingscrapy genspider hr zha
- 今天一个同事报告一个问题,表都不能使用了,检查了一下,发现问题 db2 => select * from testACTNO ACTK
- 1. 从官网选择Prometheus版本进行下载官网地址>> https://github.com/prometheus/pro
- 我是windows下安装的Anaconda2,对应的python版本是python2.7。为了方便,又借助conda安装了python3.6
- 人常常感受到色彩对自己心理的影响,这些影响总是在不知不觉中发挥作用,左右我们的情绪。色彩的心理效应发生在不同层次中。有些属直接的刺激,有些要
- 前言python本身使用 \ 来转义一些特殊字符,比如在字符串中加入引号的时候s = 'i\'m superman'
- 创建主键可以有两种方式:create table 表名(字段名 类型,字段名 类型,……primary key(name));或者是crea
- 这篇文章主要介绍了如何基于python实现脚本加密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可