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 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
python实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
Python实现二维数组输出为图片
Apr 03 Python
Python中文件的读取和写入操作
Apr 27 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
用python爬取租房网站信息的代码
Dec 14 Python
如何使用Python实现自动化水军评论
Jun 26 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
python数据分析:关键字提取方式
Feb 24 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
为什么相对PHP黑python的更少
Jun 21 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 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 float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
php实现无限级分类
2014/12/24 PHP
分享PHP守护进程类
2015/12/30 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
PDO::setAttribute讲解
2019/01/29 PHP
心扬JS分页函数代码
2010/09/10 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
Python同时迭代多个序列的方法
2020/07/28 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
简约控的天堂:The Undone
2016/12/21 全球购物
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
逻辑链路控制协议
2016/10/01 面试题
文秘专业自荐信
2013/10/14 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
yy婚礼主持词
2014/03/14 职场文书
任命书格式
2014/06/05 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
三人合伙协议书范本
2014/10/29 职场文书
二胎满月酒致辞
2015/07/29 职场文书