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

运行结果:

详解python中静态方法staticmethod用法

在类中编写静态方法和类的普通方法

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()

运行结果:

详解python中静态方法staticmethod用法

从上述代码和运行结果可以看出静态方法可以直接被调用,且不用加任何参数、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

运行结果:

详解python中静态方法staticmethod用法

实例方法、类方法、静态方法综合例子

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()  # 静态方法

运行结果:

详解python中静态方法staticmethod用法

来源:https://blog.csdn.net/weixin_44799217/article/details/125967662

标签:python,staticmethod
0
投稿

猜你喜欢

  • 巧妙的自关联运用

    2012-10-07 10:55:58
  • 最令人蛋疼的10种用户体验设计师

    2011-08-05 18:51:07
  • 如何自己制作验证码的head.fix和body.fix文件

    2009-06-01 12:50:00
  • python使用pyodbc连接sqlserver

    2021-12-24 06:06:17
  • 一个简单的像素画小工具

    2010-01-01 15:33:00
  • asp 隐藏并修改文件的最后修改时间

    2011-03-29 10:34:00
  • 在SQL触发器或存储过程中获取在程序登录的用户

    2012-01-29 18:01:32
  • Go语言 go程释放操作(退出/销毁)

    2023-09-17 22:03:42
  • SQL Server 数据页缓冲区的内存瓶颈分析

    2012-08-21 10:49:11
  • 使用豆瓣源来安装python中的第三方库方法

    2023-10-09 08:53:42
  • 简单分析python的类变量、实例变量

    2022-12-20 20:39:56
  • 如何设计具可用性的网页表单?

    2010-03-20 21:57:00
  • ASP运行环境iis和pws的搭建

    2007-09-22 18:44:00
  • python中文文本切词Kmeans聚类

    2023-06-01 18:35:57
  • Python Dict找出value大于某值或key大于某值的所有项方式

    2023-10-16 19:54:55
  • HTML5硝烟弥漫

    2009-07-06 14:44:00
  • javascript this 关键字小提示

    2009-02-03 13:22:00
  • jQuery.animate简单分析

    2010-06-26 12:45:00
  • 用 Python 连接 MySQL 的几种方式详解

    2023-07-25 08:08:50
  • 如何在MySQL数据库中使用XML数据

    2009-12-29 10:48:00
  • asp之家 网络编程 m.aspxhome.com