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 29 Python
Python的Django框架中模板碎片缓存简介
Jul 24 Python
Centos Python2 升级到Python3的简单实现
Jun 21 Python
python文本数据相似度的度量
Mar 12 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
Python中Selenium模块的使用详解
Oct 09 Python
python 自动识别并连接串口的实现
Jan 19 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 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切割页面div内容的实现代码分享
2012/07/31 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
JavaScript入门基础
2015/08/12 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
Python的形参和实参使用方式
2019/12/24 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
餐饮主管岗位职责
2013/12/10 职场文书
全民健身日活动方案
2014/01/29 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
勤俭节约倡议书
2014/04/14 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
小学教师求职信范文
2015/03/20 职场文书
通知函的格式
2015/04/27 职场文书
一般纳税人申请报告
2015/05/18 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL