python中的类方法(@classmethod)
python做面向对象编程时候,经常需要使用classmethod的描述。类方法特别容易弄混淆,因为听起来就好像“类中的方法”一样。
类方法也算一种实用的技巧,简单描述之:“类方法让类模板具有记忆力”。
类模板就是我们所定义的类。在普通情况下,不使用类方法对类进行实例化,类本身是不具有记忆性的。只是当一个静态模板被套用多次而已。如果我们想让类在每一次实例化之后,都能记载一些记忆,是否会对很多操作很有用?
我们来看一个栗子:
class Man:id = 0 # 类变量def __init__(self, name):self.name = nameself.id = self.id_number()@classmethoddef id_number(cls):cls.id += 1return cls.ida = Man('A')
print(a.id)
b = Man('B')
print(b.id)
上面的输出为:
1
2
我对Man这个类进行实例化2次,每个实例的id都不一样。这就依靠类方法来实现了:首先,用@classmethod描述类方法,然后用"cls"代表本类。类方法对类属性进行的处理是有记忆性的。
需要注意的是,类方法处理的变量一定要是类变量。因为在类方法里你用不了self来寻址实例变量,所以需要把类变量放到最前面描述,如上面的"id=0"所示。类变量是可以被self访问的,所以,在类变量定义好了以后,不需要在_init_函数里对类变量再一次描述。所以,上面代码里self.id不一定需要。
对于研究深度学习的朋友,可以有效利用这个trick,来进行模型的加载。比如,把模型封装成一个类,把初始化网络和加载模型用类方法来描述,这样一次load之后,可以一直实用模型。
python中的类方法(@classmethod)相关推荐
- python中静态变量和静态方法_【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)...
在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义 ...
- python的类方法可以用对象和类名来调用吗_怎么调用python中的类方法
python中的类用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用. 类方法 ...
- python中@staticmethod、@classmethod和实例方法
1.形式上的异同点: 在形式上,Python中:实例方法必须有self,类方法用@classmethod装饰必须有cls,静态方法用@staticmethod装饰不必加cls或self,如下代码所示: ...
- python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别
1.#类方法@classmethod,只能访问类变量,不能访问实例变量,通过cls参数传递当前类对象,不需要实例化,直接[类名.方法名()],可通过类对象和类对象实例访问 类方法:第一个参数强制为类对 ...
- Python中定义类方法
方法也分实例方法和类方法, 与属性类似 在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身. 在class中定义类方法,需要这么写: class Person(object) ...
- Python中的 @staticmethod@classmethod方法
Python面向对象编程中,类中定义的方法可以是 @classmethod 装饰的类方法,也可以是 @staticmethod 装饰的静态方法,用的最多的还是不带装饰器的实例方法,如果把这几个方法放一 ...
- Python中@staticmethod和@classmethod之间的区别
@classmethod装饰器 (The @classmethod Decorator) The @classmethod decorator is an inbuilt function decor ...
- python中的classmethod_面试题:python 中 staticmethod 和 classmethod有什么区别
面试中经常会问到staticmethod 和 classmethod有什么区别? 首先看下官方的解释: staticmethod: class staticmethod staticmethod(fu ...
- Python中@staticmethod和@classmethod的作用和区别
简单介绍一下两者的区别: 对于一般的函数test(x),它跟类和类的实例没有任何关系,直接调用test(x)即可 #!/usr/bin/python # -*- coding:utf-8 -*-def ...
最新文章
- 盖茨推荐人人该读的九本书
- 学习笔记(十三)——vim编辑与linux命令
- linux中service的问题
- 图像识别开源代码_灰度图像着色开源代码
- url中 斜杠如何传输_如何在父子页面中传输数据(layer)
- IRC 聊天工具(xchat,chatzilla,pidgin)入门教程
- zlib、libzip、 libzippp 库编译(windows + cmake + vs2013)
- socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信
- 铁岭市奔腾计算机学校地址,辽宁省铁岭市奔腾计算机职业高级中学2020年高三数学理上学期期末试题.docx...
- 解决办法:E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)
- 流媒体服务器- Wowza安装
- 南宁计算机职称考试网,南宁人事考试职称网
- 软件测试经理,高级管理退休后,给我小白指点面试迷津!
- C#验证身份证是否有效
- Python+scrcpy+pyminitouch实现自动化(四)——实现语音识别自动打卡机器人
- 从小米应用商店爬取APK文件
- Alientek SMT32开发板 跑马灯实验
- 计算机二级培训活动方案,计算机二级模拟考”策划书.doc
- Adblock 历史
- java计算机毕业设计高校学生体温管理系统源码+mysql数据库+系统+lw文档+部署