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对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
May 08 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
python实现浪漫的烟花秀
Jan 30 Python
python适合人工智能的理由和优势
Jun 28 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
python opencv如何实现图片绘制
Jan 19 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
简单了解Java Netty Reactor三种线程模型
Apr 26 Python
python实现简单的五子棋游戏
Sep 01 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 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
php创建桌面快捷方式实现方法
2015/12/31 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
Python实现统计单词出现的个数
2015/05/28 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
解读python logging模块的使用方法
2018/04/17 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
Django框架视图介绍与使用详解
2019/07/18 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
python如何调用java类
2020/07/05 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
文职个人求职信范文
2013/09/23 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
给领导的致歉信范文
2014/01/13 职场文书
志愿者活动总结
2014/04/28 职场文书
生物技术专业求职信
2014/06/10 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
质量保证书怎么写
2015/02/27 职场文书
办公室规章制度范本
2015/08/04 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript
各国货币符号大全
2022/02/17 杂记