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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python计算auc指标实例
Jul 13 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
简单了解python的内存管理机制
Jul 08 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
Python上下文管理器全实例详解
Nov 12 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
python元组拆包实现方法
Feb 28 Python
Django项目如何正确配置日志(logging)
Apr 29 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 变量定义和变量替换的方法
2009/07/30 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
JS Timing
2007/04/21 Javascript
JS window.opener返回父页面的应用
2009/10/24 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
详解python的数字类型变量与其方法
2016/11/20 Python
Python中元组,列表,字典的区别
2017/05/21 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
python如何快速拼接字符串
2020/10/28 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
文明宿舍获奖感言
2014/02/07 职场文书
委托公证书
2014/04/08 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
初中中等生评语
2014/12/29 职场文书
保卫工作个人总结
2015/03/03 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2015年共青团工作总结
2015/05/15 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android