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)相关推荐

  1. python中静态变量和静态方法_【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)...

    在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义 ...

  2. python的类方法可以用对象和类名来调用吗_怎么调用python中的类方法

    python中的类用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用. 类方法 ...

  3. python中@staticmethod、@classmethod和实例方法

    1.形式上的异同点: 在形式上,Python中:实例方法必须有self,类方法用@classmethod装饰必须有cls,静态方法用@staticmethod装饰不必加cls或self,如下代码所示: ...

  4. python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

    1.#类方法@classmethod,只能访问类变量,不能访问实例变量,通过cls参数传递当前类对象,不需要实例化,直接[类名.方法名()],可通过类对象和类对象实例访问 类方法:第一个参数强制为类对 ...

  5. Python中定义类方法

    方法也分实例方法和类方法, 与属性类似 在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身. 在class中定义类方法,需要这么写: class Person(object) ...

  6. Python中的 @staticmethod@classmethod方法

    Python面向对象编程中,类中定义的方法可以是 @classmethod 装饰的类方法,也可以是 @staticmethod 装饰的静态方法,用的最多的还是不带装饰器的实例方法,如果把这几个方法放一 ...

  7. Python中@staticmethod和@classmethod之间的区别

    @classmethod装饰器 (The @classmethod Decorator) The @classmethod decorator is an inbuilt function decor ...

  8. python中的classmethod_面试题:python 中 staticmethod 和 classmethod有什么区别

    面试中经常会问到staticmethod 和 classmethod有什么区别? 首先看下官方的解释: staticmethod: class staticmethod staticmethod(fu ...

  9. Python中@staticmethod和@classmethod的作用和区别

    简单介绍一下两者的区别: 对于一般的函数test(x),它跟类和类的实例没有任何关系,直接调用test(x)即可 #!/usr/bin/python # -*- coding:utf-8 -*-def ...

最新文章

  1. 盖茨推荐人人该读的九本书
  2. 学习笔记(十三)——vim编辑与linux命令
  3. linux中service的问题
  4. 图像识别开源代码_灰度图像着色开源代码
  5. url中 斜杠如何传输_如何在父子页面中传输数据(layer)
  6. IRC 聊天工具(xchat,chatzilla,pidgin)入门教程
  7. zlib、libzip、 libzippp 库编译(windows + cmake + vs2013)
  8. socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信
  9. 铁岭市奔腾计算机学校地址,辽宁省铁岭市奔腾计算机职业高级中学2020年高三数学理上学期期末试题.docx...
  10. 解决办法:E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)
  11. 流媒体服务器- Wowza安装
  12. 南宁计算机职称考试网,南宁人事考试职称网
  13. 软件测试经理,高级管理退休后,给我小白指点面试迷津!
  14. C#验证身份证是否有效
  15. Python+scrcpy+pyminitouch实现自动化(四)——实现语音识别自动打卡机器人
  16. 从小米应用商店爬取APK文件
  17. Alientek SMT32开发板 跑马灯实验
  18. 计算机二级培训活动方案,计算机二级模拟考”策划书.doc
  19. Adblock 历史
  20. java计算机毕业设计高校学生体温管理系统源码+mysql数据库+系统+lw文档+部署

热门文章

  1. 适合用于听写的新型语音识别技术 可将单词错误率低于5%
  2. Web攻防之暴力破解(何足道版)
  3. 配置IIS服务器环境--win10
  4. 电机与运动控制笔记整理(二)——直流调速系统
  5. c语言如何让字母右对齐,C语言中可以用指定输出宽度的方式实现右对齐。
  6. 单边正弦信号拉斯变换 matlab
  7. PyQt高级界面控件及操作
  8. word删除空行的方法(总结最好用的)
  9. 更改Ubuntu 的登录背景图片
  10. Ubuntu 13.04 Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答