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守护进程(daemon)代码实例
Mar 06 Python
详解python单例模式与metaclass
Jan 15 Python
学习python类方法与对象方法
Mar 15 Python
详解Python异常处理中的Finally else的功能
Dec 29 Python
python之pandas用法大全
Mar 13 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
Python实现FM算法解析
Jun 18 Python
python可视化爬虫界面之天气查询
Jul 03 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 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学习之数组值的操作
2011/04/17 PHP
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
Python通过select实现异步IO的方法
2015/06/04 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
Python基于当前时间批量创建文件
2020/05/07 Python
Python模块常用四种安装方式
2020/10/20 Python
python 图像增强算法实现详解
2021/01/24 Python
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
九年级体育教学反思
2014/01/23 职场文书
车间核算员岗位职责
2014/07/01 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
公司辞职信模板
2015/05/13 职场文书