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列表(list)常用操作方法小结
Feb 02 Python
Python编写电话薄实现增删改查功能
May 07 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
关于反爬虫的一些简单总结
Dec 13 Python
Python subprocess模块详细解读
Jan 29 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
Python迭代器定义与简单用法分析
Apr 30 Python
python之消除前缀重命名的方法
Oct 21 Python
python微信撤回监测代码
Apr 29 Python
Python中@property的理解和使用示例
Jun 11 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 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中创建并处理图象
2006/10/09 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
Laravel日志用法详解
2016/10/09 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
javascript一些实用技巧小结
2011/03/18 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
跟老齐学Python之网站的结构
2014/10/24 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
Python中关于浮点数的冷知识
2019/09/22 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
师范应届毕业生自荐信
2013/11/18 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
销售会议开幕词
2015/01/28 职场文书
宇宙与人观后感
2015/06/05 职场文书
中秋节祝酒词
2015/08/12 职场文书
八年级英语教学反思
2016/02/15 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书