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实用技巧两则
Aug 29 Python
详细介绍Ruby中的正则表达式
Apr 10 Python
Python中的字符串替换操作示例
Jun 27 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
python读取指定字节长度的文本方法
Aug 27 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
在python3.9下如何安装scrapy的方法
Feb 03 Python
Django使用echarts进行可视化展示的实践
Jun 10 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重新实现PHP脚本引擎内置函数
2007/03/06 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
jquery 学习之二 属性相关
2010/11/23 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
Vuex的API文档说明详解
2020/02/05 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python3离线安装Requests模块问题
2019/10/13 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
利群广告词
2014/03/20 职场文书
好听的队名和口号
2014/06/09 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书