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中as用法实例分析
Apr 30 Python
Python记录详细调用堆栈日志的方法
May 05 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
Python 元类实例解析
Apr 04 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
分享PyCharm的几个使用技巧
Nov 10 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
python 读取.nii格式图像实例
Jul 01 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
Python Pivot table透视表使用方法解析
Sep 11 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版自动生成文章摘要
2008/07/23 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
jquery 插件学习(六)
2012/08/06 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
JS中innerHTML和pasteHTML的区别实例分析
2016/06/22 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
Vue入门之数据绑定(小结)
2018/01/08 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
pandas通过loc生成新的列方法
2018/11/28 Python
django的settings中设置中文支持的实现
2019/04/28 Python
Python求离散序列导数的示例
2019/07/10 Python
Python列表切片常用操作实例解析
2019/12/16 Python
python关于变量名的基础知识点
2020/03/03 Python
关于python中导入文件到list的问题
2020/10/31 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
打架检讨书800字
2014/01/10 职场文书
美容院考勤制度
2014/01/30 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
测控技术自荐信
2014/06/05 职场文书
单位婚育证明范本
2014/11/21 职场文书
毕业生个人总结
2015/02/28 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis