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获取linux主机ip的简单实现方法

    Python获取linux主机ip的简单实现方法

    这篇文章主要介绍了Python获取linux主机ip的简单实现方法,涉及Python使用socket模块调用shell命令的相关技巧,需要的朋友可以参考下
    2016-04-04
  • Python3导入CSV文件的实例(跟Python2有些许的不同)

    Python3导入CSV文件的实例(跟Python2有些许的不同)

    今天小编就为大家分享一篇Python3导入CSV文件的实例(跟Python2有些许的不同),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 如何使用Python调整图像大小

    如何使用Python调整图像大小

    这篇文章主要介绍了如何使用Python调整图像大小,帮助大家更好的利用python处理图像,感兴趣的朋友可以了解下
    2020-09-09
  • 详解Python中的元组与逻辑运算符

    详解Python中的元组与逻辑运算符

    这篇文章主要介绍了Python中的元组与逻辑运算符的用法,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 基于Python如何使用AIML搭建聊天机器人

    基于Python如何使用AIML搭建聊天机器人

    AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由Richard Wallace和世界各地的自由软件社区在1995年至2002年发明的,通过本文给大家介绍基于Python如何使用AIML搭建聊天机器人,需要的朋友一起学习
    2016-01-01
  • python可视化篇之流式数据监控的实现

    python可视化篇之流式数据监控的实现

    这篇文章主要介绍了python可视化篇之流式数据监控的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 解决更改AUTH_USER_MODEL后出现的问题

    解决更改AUTH_USER_MODEL后出现的问题

    这篇文章主要介绍了解决更改AUTH_USER_MODEL后出现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python3 虚拟开发环境搭建过程(图文详解)

    Python3 虚拟开发环境搭建过程(图文详解)

    这篇文章主要介绍了Python3 虚拟开发环境搭建过程,本文通过图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • python的mysqldb安装步骤详解

    python的mysqldb安装步骤详解

    这篇文章主要介绍了python的mysqldb安装步骤详解的相关资料,这里提供实现的具体步骤,需要的朋友可以参考下
    2017-08-08
  • MySQL最常见的操作语句小结

    MySQL最常见的操作语句小结

    这篇文章主要介绍了MySQL最常见的操作语句小结,与表和库相关的这些语句是学习MySQL中最基础的知识,需要的朋友可以参考下
    2015-05-05

最新评论