python类方法在类外定义_第7.15节 Python中classmethod定义的类方法详解
第7.15节 Python中classmethod定义的类方法详解
类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法。本节介绍类方法的定义和使用。
一、 类方法的定义
在类中定义的方法,默认是实例方法,要定义类方法,需要用到单独的语法。
1. 语法:
@classmethod
def 方法名(cls,其他参数):
方法体
2. 定义说明:
1) 上述语法定义中,@classmethod称为类方法装饰器,凡是类方法定义都必须有该装饰器。
装饰器是Python中一个重要概念,本质上是一个对函数进行转换的函数,以@符号开头,后面是一个函数名。关于装饰器涉及比较多的知识,在本节暂不展开介绍,后面章节专门介绍,大家只要知道定义类方法需要使用@classmethod就行了。
2) 参数中的cls代表类自身,与实例方法中的self是相同的机制,也可以是任意的名字,类方法定义时第一个形参必须是cls,所有关于类属性的访问在类方法内都必须通过cls或类名进行方法。
二、 类方法的使用
类方法用在与单个实例无关但与类或类的所有实例相关的访问场景,具体使用的方式如下:
1. 类方法可以在所有类方法中通过“类名.方法名”方式调用;
2. 类方法可以在类方法中通过“cls.方法名”方式调用,cls的来源请见上面类方法定义的说明;
3. 类方法可以在实例方法中通过“类名.方法名”方式调用;
4. 类方法可以在实例方法中通过“self.方法名”或“self.__class__.方法名”方式调用;
1) 这种方式当类名可能修改时比直接用类名调用方便;
2) 该访问方式可以用在构造方法等实例方法中,但“self.__class__.方法名”不能用在重写的__new__方法中。
a) 关于__ new__方法,相关内容在此不仔细介绍,大家可以到网上查一下资料,后面老猿将考虑单独介绍,需要说明的是这也是一个实例定义时执行的方法,它在构造方法之前执行,一般不要重写该方法;
b) “self.__class__.方法名”不能用在重写的__new__方法中是因为此时实例还没创建完成,不能正确的获取到self.__class__的值(此时self.__class__的值为),而类方法与实例无关,因此“self.方法名”可以访问。
5. 类方法可以在类定义外的调用方代码中通过“类名.方法名”方式调用;
6. 类方法可以在类定义外的调用方代码中通过“实例名.方法名”方式调用,此时实参也无需传递cls;
7. 类方法可以在类定义外的调用方代码中通过“实例名. __class__.方法名”方式调用,这种方式有点画蛇添足,只是在此说明一种访问方法,并不推荐使用。
注意类方法不能在类体代码中调用:
1. 不能在类体中直接调用类方法时,这个时候类还未定义完,执行时会认为类未定义,会报类对象不可调用;
2. 当实例方法和类方法重名时,在类体代码中后出现的方法会覆盖前面的方法,其实在Python中,同一名字空间的同名函数(不管参数是否数目相同)都会被后定义的覆盖,Python不支持一个函数不同变量的情况。由于类方法和实例方法都在类的空间内,因此二者不能重名。
本节详细介绍了类方法的定义和使用方法,注意类方法定义必须使用装饰器,方法中第一个形参为cls,通过“类名.方法名”的调用处不用传递实参cls,而是由Python代填。类方法的具体案例请见下节的案例介绍。
老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!
python类方法在类外定义_第7.15节 Python中classmethod定义的类方法详解相关推荐
- 为什么python打包的应用那么大_浅谈python3打包与拆包在函数的应用详解
1.序列(拆包) *用作序列拆包:*可对字符串.列表.集合.元组.字典.数字元素等序列进行拆包 print(*(1,2,3,4,5,6)) #1 2 3 4 5 6 print(*[1,2,3,4,5 ...
- sata接口 图解 定义_硬盘有几个接口 硬盘不同接口介绍【详解】
硬盘究竟有多少个接口?目前常用的接口已经有4种之多!而且有的接口还存在不同版本,这就造成一个问题,当你毫无准备买了一块硬盘回来后发现,要么是接口不对,要么是性能达不到预期.今天小编就给大家梳理一下,这 ...
- python好看图案的编程代码_只需15行Python代码,实现图像定位功能
引言本教程使用的环境:Windows 10 + Python 3.6 数据源:The Oxford-IIIT Pet Dataset 需要的第三方库:import tensorflow as tf i ...
- python运用ico图标_如何优雅地处理Django中的favicon.ico图标详解
前言 favicon.ico是网站的图标也是网站的头像,简单来说,就是让我们的网站更加好看. 本文主要给大家介绍了关于优雅处理Django中favicon.ico图标的相关内容,分享出来供大家参考学习 ...
- python惰性求值的特点_C#教程之C#函数式编程中的惰性求值详解
https://www.xin3721.com/eschool/python.html 惰性求值 在开始介绍今天要讲的知识之前,我们想要理解严格求值策略和非严格求值策略之间的区别,这样我们才能够深有体 ...
- c++ 数组截取_【学习教程】JavaScript中原生Array数组方法详解
来源 | http://www.fly63.com/article/detial/9692 JS中,数组可以通过阵列构造函数或[]字面量的方式创建.数组是一个特殊的对象,继承自对象原型,但用typeo ...
- 爬虫技术python爬到女性语音_python爬虫看看虎牙女主播中谁最“顶”步骤详解
网页链接:https://www.huya.com/g/4079 这里的主要步骤其实还是和我们之前分析的一样,如下图所示: 这里再简单带大家看一下就行,重点是我们的第二部分. 既然网页结构我们已经分析 ...
- python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...
- 第8.15节 Python重写自定义类的__repr__方法
一. 引言 前面两节分别介绍了Python类中的__str__和__repr__方法的作用和语法,所有新式类都支持这两个方法,因为object类实现了这两个方法,但实际上各位开发者在自定义类的过程中, ...
- python pptx库中文文档_基于python-pptx库中文文档及使用详解
个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...
最新文章
- 元素节点、属性节点、文本节点 的节点属性
- 如何修复修复损坏的TAU G2的.u2文件
- oracle maa全称,OracleMAA参考架构.PDF
- 数据库-优化-慢查日志的存储格式
- 『飞秋』在.NET 4中调用GDAL库时遇到的问题及解决方法
- 《深入浅出DPDK》读书笔记(三):NUMA - Non Uniform Memory Architecture 非统一内存架构
- mysql每10万条数据分区_WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案...
- 如何将手机屏幕投影到电脑电视
- C# 打开word文件
- Banner实现图片轮播
- Android studio 之 Menu(菜单)
- 使用Windows优化大师或其他注册表清理软件导致NVIDIA控制面板打不开的解决方法
- 达索SOLIDWORKS PDM让你的团队协作更紧密
- 数字信号处理学习笔记[3] 滤波与褶积,Z变换
- 基于python和amap(高德地图)web api的爬虫,用于搜索某POI点
- 猿辅导2019 编程两道
- Nginx服务器读取不到文件的转换方法
- Fadeln()方法
- Java入门part6--继承和多态
- 大疆OSMO POCKET(大疆灵眸)使用无线模块连接手机后瞬间断开连接的解决办法
热门文章
- win10计算机维护,关掉win10系统自动维护功能的方法【图文教程】
- 计算机思维在化学上的应用,信息技术在化学教育中的应用
- java submit execute_ExecutorService中submit和execute的区别
- git pull冲突:commit your changes or stash them before you can merge.
- AJAX 数据库实例
- JAVA和JVM运行原理揭秘
- spm_预处理实验记录
- 业界资讯: Flash Player Incubator 改进
- Compiz Check测试Linux桌面3D兼容性
- 常见js表单验证方法(H5,layUI,amazeUI,vue)