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中的zip函数使用示例
Jan 29 Python
python对指定目录下文件进行批量重命名的方法
Apr 18 Python
Python中文竖排显示的方法
Jul 28 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
Apr 27 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
python 实现任务管理清单案例
Apr 25 Python
python logging.info在终端没输出的解决
May 12 Python
简单了解Python字典copy与赋值的区别
Sep 16 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获取表单textarea数据中的换行问题
2010/09/10 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
chrome原生方法之数组
2011/11/30 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
python web框架学习笔记
2016/05/03 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
如何启动时不需输入用户名与密码
2014/05/09 面试题
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
工程概预算专业毕业生求职信
2013/10/04 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
海飞丝广告词
2014/03/20 职场文书
领导班子整改措施
2014/10/24 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
酒店前台岗位职责
2015/04/16 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python