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中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
python递归计算N!的方法
May 05 Python
python+django快速实现文件上传
Oct 24 Python
使用Python对MySQL数据操作
Apr 06 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
Python3.8中使用f-strings调试
May 22 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
在django模板中实现超链接配置
Aug 21 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
为什么说python更适合树莓派编程
Jul 20 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 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
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
laravel入门知识点整理
2020/09/15 PHP
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
javascript读写json示例
2014/04/11 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
委托书范文
2014/04/02 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
Redis中一个String类型引发的惨案
2021/07/25 Redis