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 相关文章推荐
打开电脑上的QQ的python代码
Feb 10 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
python八大排序算法速度实例对比
Dec 06 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
python版本五子棋的实现代码
Dec 11 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
Django基础知识 URL路由系统详解
Jul 18 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
如何用python识别滑块验证码中的缺口
Apr 01 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的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
python实现一次创建多级目录的方法
2015/05/15 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
实习指导老师评语
2014/04/26 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS