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


Posted in Python onOctober 17, 2020

英文文档:

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 相关文章推荐
Python实现的二维码生成小软件
Jul 11 Python
python列表操作实例
Jan 14 Python
Python实现单词拼写检查
Apr 25 Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
python实现图像识别功能
Jan 29 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
Python远程视频监控程序的实例代码
May 05 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
学python需要去培训机构吗
Jul 01 Python
用python计算文件的MD5值
Dec 23 Python
用Python制作灯光秀短视频的思路详解
Apr 13 Python
Python中的datetime包与time包包和模块详情
Feb 28 Python
详解python算法常用技巧与内置库
Oct 17 #Python
Python 操作SQLite数据库的示例
Oct 16 #Python
python Selenium 库的使用技巧
Oct 16 #Python
用Python进行websocket接口测试
Oct 16 #Python
python如何控制进程或者线程的个数
Oct 16 #Python
python利用 keyboard 库记录键盘事件
Oct 16 #Python
python实现快速文件格式批量转换的方法
Oct 16 #Python
You might like
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
jQuery DOM操作小结与实例
2010/01/07 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
让Python代码更快运行的5种方法
2015/06/21 Python
Python中字符串的格式化方法小结
2016/05/03 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
python PyTorch预训练示例
2018/02/11 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
PyCharm代码格式调整方法
2018/05/23 Python
django foreignkey(外键)的实现
2019/07/29 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
大学毕业生工作的自我评价
2013/10/01 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
校园文明倡议书
2014/05/16 职场文书
2015新学期家长寄语
2015/02/26 职场文书
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js