Python classmethod装饰器原理及用法解析


Posted in Python onOctober 17, 2020

英文文档:

classmethod(function)

Return a class method for function.

A class method receives the class as implicit first argument, just like an instance method receives the instance. To declare a class method, use this idiom:

class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
The @classmethod 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. If a class method is called for a derived class, the derived class object is passed as the implied first argument.

Class methods are different than C++ or Java static methods. If you want those, see staticmethod() in this section.

  标记方法为类方法的装饰器

说明:

1. classmethod 是一个装饰器函数,用来标示一个方法为类方法

2. 类方法的第一个参数是类对象参数,在方法被调用的时候自动将类对象传入,参数名称约定为cls

3. 如果一个方法被标示为类方法,则该方法可被类对象调用(如 C.f()),也可以被类的实例对象调用(如 C().f())

>>> class C:
  @classmethod
  def f(cls,arg1):
    print(cls)
    print(arg1)
    
>>> C.f('类对象调用类方法')
<class '__main__.C'>
类对象调用类方法

>>> c = C()
>>> c.f('类实例对象调用类方法')
<class '__main__.C'>
类实例对象调用类方法

4. 类被继承后,子类也可以调用父类的类方法,但是第一个参数传入的是子类的类对象

>>> class D(C):
  pass

>>> D.f("子类的类对象调用父类的类方法")
<class '__main__.D'>
子类的类对象调用父类的类方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python linecache.getline()读取文件中特定一行的脚本
Sep 06 Python
python两种遍历字典(dict)的方法比较
May 29 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
Python基于checksum计算文件是否相同的方法
Jul 09 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
Python自定义线程类简单示例
Mar 23 Python
Python中正则表达式的用法总结
Feb 22 Python
python每天定时运行某程序代码
Aug 16 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
django中cookiecutter的使用教程
Dec 03 Python
关于python爬虫应用urllib库作用分析
Sep 04 Python
Python基于staticmethod装饰器标示静态方法
Oct 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
You might like
IIS6的PHP最佳配置方法
2007/03/19 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
深入解析Python中的urllib2模块
2015/11/13 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
python内打印变量之%和f的实例
2020/02/19 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
服务中心夜班服务员岗位职责
2013/11/27 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
校友会欢迎辞
2014/01/13 职场文书
公司开业致辞
2015/07/29 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
python中的getter与setter你了解吗
2022/03/24 Python