python中@staticmethod方法的使用

 更新时间:2023年09月19日 09:56:38   作者:elie813  
这篇文章主要介绍了python中@staticmethod方法的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python @staticmethod方法

python中@staticmethod方法,类似于C++中的static,方便将外部函数集成到类体中,主要是可以在不实例化类的情况下直接访问该方法,如果你去掉staticmethod,在方法中加self也可以通过实例化访问方法也是可以集成。

class Test:
      def __init__(self,num):
            self.num = num;
      def cout_num(self):
            print(self.num)
      @staticmethod
      def print_num():
            print("Hello World")         
if __name__ == "__main__":
      obj = Test(10)
      """实例化成员方法"""
      obj.cout_num()
      """直接访问静态方法"""
      Test.print_num()
      """实例化 访问静态方法"""
      obj.print_num()

输出结果

10
Hello World
Hello World

@staticmethod和@classmethod的区别

一个比较简单粗暴的区分方式

要决定是使用@staticmethod还是@classmethod,你必须看看类方法内部。如果你的方法访问了类中的其他变量/方法,那么就使用@classmethod。

另一方面,如果方法没有接触到类中的任何其他变量,那么就使用@staticmethod。

其设计有更深的逻辑联系:

  • classmethod:主要用于替代构造函数。
  • staticmethod:不使用对象的状态,甚至不使用类本身的结构。它可以是一个类外部的函数。它只放在类的内部,用于分组具有类似功能的函数(例如,像Java的数学类静态方法)

示例代码:

@classmethod 
Person.printAge = classmethod(Person.printAge)
@staticmethod 
Calculator.add_numbers = staticmethod(Calculator.add_numbers)

能看懂这两行代码,应该就能理解什么是静态方法,什么是类方法了吧。

当然,看的不太懂也没有关系,下面通过栗子来详细的解说一下。

类方法@classmethod

什么是类方法?

类方法是绑定到类而不是其对象的方法。

它不需要创建类实例,就像staticmethod 一样。

静态方法 @staticmethod

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。

而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。

python staticmethod 返回函数的静态方法。

该方法不强制要求传递参数,

声明一个静态方法:

class C(object):
    @staticmethod
    def f(arg1, arg2, ...):
        ...

可以不实例化调用该方法 C.f()

实现实例化使用 C().f()

什么时候使用@staticmethod

当某个方法(函数)不需要用到对象中的任何资源,将这个方法改为一个静态方法,

加上@staticmethod;

这个函数的形参不需要添加 self

加上之后, 这个方法就和普通的函数没有什么区别了, 只不过写在了一个类中, 可以使用这个类的对象调用,也可以使用类直接调用。

区别

静态方法和类方法之间的区别在于:

静态方法对类一无所知,只处理参数。

类方法适用于类,因为它的参数始终是类本身。

类方法可以由类及其对象调用。

Class.classmethod()
Class().classmethod()

但无论如何,class方法始终附加到一个类,其中第一个参数作为类本身,cls。

def classMethod(cls, args…)

五、例子

class Person:
    age = 25
    def printAge(cls):
        print('The age is:', cls.age)
Person.printAge = classmethod(Person.printAge)
Person.printAge()
class Person:
    age = 25
    @classmethod
    def printAge(cls):
        print('The age is:', cls.age)
Person.printAge()

注意:

你会发现改变了代码,但是结果还是一样的。你细心就会有所发现,没错,代码中的:

****

@classmethod 等价于 Person.printAge = classmethod(Person.printAge)

实例方法可以调用实例方法、类方法、静态方法。

类对象只能调用类方法、静态方法。

classmethod与staticmethod用法类似,classmethod可以通过staticmethod代替,在通过类调用时,这两者对于调用者来说是不可区分的。这两者的区别在于,classmethod增加了一个对实际调用类的引用。

1.方法可以判断出自己是通过基类被调用,还是通过某个子类被调用

2.通过子类调用时,方法可以返回子类的实例而非基类的实例

3.通过子类调用时,方法可以调用子类的其他classmethod

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python如何实现macOS系统代理的设置

    Python如何实现macOS系统代理的设置

    这篇文章主要为大家详细介绍了Python如何实现macOS系统代理的设置,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • 如何利用python绘制等高线图

    如何利用python绘制等高线图

    这篇文章主要介绍了如何利用python绘制等高线图,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • 如何运行带参数的python脚本

    如何运行带参数的python脚本

    这篇文章主要介绍了如何运行带参数的python脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 利用Python脚本实现ping百度和google的方法

    利用Python脚本实现ping百度和google的方法

    最近在做SEO的时候,为了让发的外链能够快速的收录,想到了利用ping的功能,google和百度都有相关的ping介绍,有兴趣的朋友可以去看看相关的知识。下面这篇文章主要介绍了利用Python脚本实现ping百度和google的方法,需要的朋友可以参考借鉴,一起来看看吧。
    2017-01-01
  • python使用epoll实现服务端的方法

    python使用epoll实现服务端的方法

    今天小编就为大家分享一篇python使用epoll实现服务端的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】

    Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】

    这篇文章主要介绍了Python面向对象程序设计OOP入门教程,较为详细的分析了Python面向对象类,实例,继承,重载等相关概念与使用技巧,需要的朋友可以参考下
    2019-01-01
  • Python的经纬度与xy坐标系相互转换方式

    Python的经纬度与xy坐标系相互转换方式

    这篇文章主要介绍了Python的经纬度与xy坐标系相互转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 基于Python实现射击小游戏的制作

    基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-04-04
  • Python一行代码识别车牌号码实现示例详解

    Python一行代码识别车牌号码实现示例详解

    这篇文章主要为大家介绍了Python一行代码识别车牌号码实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Python实战之能监控文件变化的神器—看门狗

    Python实战之能监控文件变化的神器—看门狗

    这篇文章主要介绍了Python实战之能监控文件变化的神器—看门狗,文中有非常详细的图文及代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05

最新评论