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处理字符串之isspace()方法的使用
May 19 Python
python中hashlib模块用法示例
Oct 30 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python实现微信远程控制电脑
Feb 22 Python
Python+OpenCV实现车牌字符分割和识别
Mar 31 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
python集合是否可变总结
Jun 20 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
Python数组并集交集补集代码实例
Feb 18 Python
python中如何使用虚拟环境
Oct 14 Python
python装饰器代码深入讲解
Mar 01 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
Yii2单元测试用法示例
2016/11/12 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
JavaScript实现弹出广告功能
2017/03/30 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python单链表简单实现代码
2016/04/27 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
Python中base64与xml取值结合问题
2019/12/22 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
什么是serialVersionUID
2016/03/04 面试题
舌尖上的中国观后感
2015/06/02 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
八年级物理教学反思
2016/02/19 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
python 下划线的多种应用场景总结
2021/05/12 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers