Python基于staticmethod装饰器标示静态方法

 更新时间:2020年10月17日 09:52:42   作者:lincappu  
这篇文章主要介绍了Python基于staticmethod装饰器标示静态方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

英文文档:

staticmethod(function)

Return a static method for function.

A static method does not receive an implicit first argument.

The @staticmethod form is a function decorator – see the description of function definitions in Function definitions for details.

It can be called either on the class (such as C.f()) or on an instance (such as C().f()). The instance is ignored except for its class.

  标示方法为静态方法的装饰器

说明:

  1. 类中普通的方法,实际上既可以被类直接调用也可以被类的实例对象调用,但是被实例对象调用的时候,要求方法至少有一个参数,而且调用时会将实例对象本身传给第一个参数

>>> class Student(object):
  def __init__(self,name):
    self.name = name
  def sayHello(lang):
    print(lang)
    if lang == 'en':
      print('Welcome!')
    else:
      print('你好!')
 
  
>>> Student.sayHello
<function Student.sayHello at 0x02AC7810>
>>> a = Student('Bob')
>>> a.sayHello
<bound method Student.sayHello of <__main__.Student object at 0x02AD03F0>>
>>> Student.sayHello('en') # 类调用的时候,将'en'传给了lang参数
en
Welcome!

>>> a.sayHello() # 类实例对象调用的时候,将对象本身自动传给了lang参数,不能再接收参数
<__main__.Student object at 0x02AD03F0>
你好!
  >>> a.sayHello('en')  Traceback (most recent call last):  File "<pyshell#7>", line 1, in <module>  a.sayHello('en')  TypeError: sayHello() takes 1 positional argument but 2 were given

  2. staticmethod函数功能就是将一个方法定义成类的静态方法,正确的方法是使用 @staticmethod装饰器,这样在实例对象调用的时候,不会把实例对象本身传入静态方法的第一个参数了。

# 使用装饰器定义静态方法
>>> class Student(object):
  def __init__(self,name):
    self.name = name
  @staticmethod
  def sayHello(lang):
    print(lang)
    if lang == 'en':
      print('Welcome!')
    else:
      print('你好!')

      
>>> Student.sayHello('en') #类调用,'en'传给了lang参数
en
Welcome!

>>> b = Student('Kim') #类实例对象调用,不再将类实例对象传入静态方法
>>> b.sayHello()
Traceback (most recent call last):
 File "<pyshell#71>", line 1, in <module>
  b.sayHello()
TypeError: sayHello() missing 1 required positional argument: 'lang'

>>> b.sayHello('zh') #类实例对象调用,'zh'传给了lang参数
zh
你好!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别

    python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别

    这篇文章主要给大家介绍了关于python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-06-06
  • Python中捕捉详细异常信息的代码示例

    Python中捕捉详细异常信息的代码示例

    这篇文章主要介绍了Python中捕捉详细异常信息的代码示例,本文的代码是从Python 2.7的源码中得来,可以获取文件位置、行号、函数、异常信息等内容,需要的朋友可以参考下
    2014-09-09
  • Python脚本后台运行的五种方式

    Python脚本后台运行的五种方式

    最近需要在后台运行脚本,本文主要介绍了Python脚本后台运行的五种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • pandas 修改列名的实现示例

    pandas 修改列名的实现示例

    本文主要介绍了pandas修改列名的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Python3 把一个列表按指定数目分成多个列表的方式

    Python3 把一个列表按指定数目分成多个列表的方式

    今天小编就为大家分享一篇Python3 把一个列表按指定数目分成多个列表的方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • TensorFlow实现指数衰减学习率的方法

    TensorFlow实现指数衰减学习率的方法

    这篇文章主要介绍了TensorFlow实现指数衰减学习率的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 基于python的七种经典排序算法(推荐)

    基于python的七种经典排序算法(推荐)

    本篇文章主要介绍基于python的七种经典排序算法(推荐),具有一定的参考价值,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2016-12-12
  • Python中矩阵库Numpy基本操作详解

    Python中矩阵库Numpy基本操作详解

    这篇文章主要为大家详细介绍了Python中矩阵库Numpy的基本操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 使用PyQt5实现图片查看器的示例代码

    使用PyQt5实现图片查看器的示例代码

    这篇文章主要介绍了使用PyQt5实现图片查看器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python计算点到直线距离、直线间交点夹角

    Python计算点到直线距离、直线间交点夹角

    这篇文章主要介绍了Python计算点到直线距离、直线间交点夹角,需要的朋友可以参考下
    2021-12-12

最新评论