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执行等待程序直到第二天零点的方法
Apr 23 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
Jun 29 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
Python3 合并二叉树的实现
Sep 30 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
MATLAB数学建模之画图汇总
Jul 16 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 Python
python获取淘宝服务器时间的代码示例
Apr 22 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面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
组合算法的PHP解答方法
2012/02/04 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
js的2种继承方式详解
2014/03/04 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
班队活动设计方案
2014/01/30 职场文书
交通安全标语
2014/06/06 职场文书
社保转移委托书范本
2014/10/08 职场文书
2014年质检工作总结
2014/11/26 职场文书
学校百日安全活动总结
2015/05/07 职场文书
总结Python使用过程中的bug
2021/06/18 Python
JavaScript实现登录窗体
2021/06/22 Javascript
golang的文件创建及读写操作
2022/04/14 Golang