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中的if、else、elif语句用法简明讲解
Mar 11 Python
Python内建模块struct实例详解
Feb 02 Python
详解django三种文件下载方式
Apr 06 Python
python实现自动发送邮件
Jun 20 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
python tkinter组件使用详解
Sep 16 Python
用Python解数独的方法示例
Oct 24 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
Python logging模块写入中文出现乱码
May 21 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 Python
Python中json.dumps()函数的使用解析
May 17 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 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
php UBB 解析实现代码
2011/11/27 PHP
php批量修改表结构实例
2017/05/24 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
一句话JavaScript表单验证代码
2009/08/02 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
JS二叉树的简单实现方法示例
2017/04/05 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
python中的协程深入理解
2019/06/10 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
电气个人求职信范文
2014/02/04 职场文书
物流管理专业自荐信
2014/06/23 职场文书
六年级语文教学反思
2016/03/03 职场文书