zoukankan      html  css  js  c++  java
  • python中@staticmethod和@classmethod用法和解释

    先来解释一下staticmethod和classmethod。直接一点来说,我们知道对于一个普通的类,我们要使用其中的函数的话,需要对类进行实例化,而一个类中,某个函数前面加上了staticmethod或者classmethod的话,那么这个函数就可以不通过实例化直接调用,什么意思呢?就是说有时候,我们需要把一些具有特定功能的函数放到一起,做成包导入Python程序,最好就是把他们放到一个类中,但是一个类每次我都要去实例化他,我觉得很麻烦,于是我在函数前面加上了@staticmethod,@classmethod,那么我下次用这个函数的功能的时候,可以直接用 类名.函数名 的形式了,这样是不是省心多了?

    • @staticmethod将函数转换成为一个静态方法,@classmethod将函数转换成为一个类方法。
    • @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
    • @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
    • 如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
    • @classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。
      实例方法 类方法(classmethod) 静态方法(staticmethod)
    定义方式 self作为第一个参数 cls作为第一个参数 无强制参数
    绑定对象 类的实例
    调用方式 只能通过类的实例调用 类对象或者类的实例均可调用 类对象或者类的实例均可调用
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Date    : 2019-04-04 12:46:46
    # @Author  : Your Name (you@example.org)
    # @Link    : http://example.org
    # @Version : $Id$
    
    
    class Test:
    
        def __init__(self, u):
            self.u = u
            print("类的初始化方法")
    
        def fun1(a, c):
            print("fun1: I' am instancemethod {}".format(c))
    
        @staticmethod
        def fun2():
            print("fun2: I' am staticmethod")
            Test("fdsf").fun1("call1")
    
        @classmethod
        def fun3(cls):
            print("fun3: I'am classmethod")
            cls("ooo").fun1("这样调用")
    
    
    Test("a").fun1("I' am args")
    Test.fun2()
    Test.fun3()

     参考:https://blog.csdn.net/ibelieve8013/article/details/83037996

  • 相关阅读:
    Python/Java读取TXT文件
    Robot Framework——百度搜索
    Selenium Webdriver——去哪儿网输入实例
    Selenium Webdriver——JS处理rich text(富文本框)
    selenium webdriver——JS操作日历控件
    selenium webdriver——JS对Input执行输入
    selenium webdriver——JS滚动到指定位置
    Python-json
    经验之谈
    技术思想
  • 原文地址:https://www.cnblogs.com/pyse/p/12564497.html
Copyright © 2011-2022 走看看