python中classmethod与staticmethod的差异及应用
类中三种函数的应用
#!/usr/bin/env python
# -*- coding: utf-8 -*-class TClassStatic(object):def __init__(self, data):self.data = datadef printself(*arg):# for item in arg:# print item.dataprint("printself: ", arg)@staticmethoddef smethod(*arg):print("stattic: ", arg)@classmethoddef cmethod(*arg):print("class: ", arg)def main():obj = TClassStatic(10)obj.printself()obj.smethod()obj.cmethod()if __name__ == "__main__":main()
通过三种函数的调用可以很清楚的看出,各种函数的默认参数,输出结果如下:
('printself: ', (<__main__.TClassStatic object at 0x6ffffe22910>,))
('stattic: ', ())
('class: ', (<class '__main__.TClassStatic'>,))
1、普通函数,默认传入参数self,相当于C++中的this指针。解除printself中的注释,可以输出第一个参数的data就是对象的data(10)。这类函数的定义通常为def printself(self, *args, **kwargs)
,其特征是第一个参数为self,调用的时候只需传args,kwargs的值,实例对象.方法
2、@staticmethod修饰的函数,相当于C++中的类中静态函数,可以当做全局函数应用,默认不传入参数,调用方法:实例对象或类对象.方法
3、@classmethod修饰的函数,第一个参数cls默认是类名,调用方法:实例对象或类对象.方法
@classmethod与@staticmethod的应用实例
#!/usr/bin/env python
# -*- coding: utf-8 -*-class TClassStatic(object):obj_num = 0def __init__(self, data):self.data = dataTClassStatic.obj_num += 1def printself(self):print("self.data: ", self.data)@staticmethoddef smethod():print("the number of obj is : ", TClassStatic.obj_num)@classmethoddef cmethod(cls):print("cmethod : ", cls.obj_num)cls.smethod()def main():objA = TClassStatic(10)objB = TClassStatic(12)objB.printself()objA.smethod()objB.cmethod()print("------------------------------")TClassStatic.smethod()TClassStatic.cmethod()if __name__ == "__main__":main()
输出结果如下:
('self.data: ', 12)
('the number of obj is : ', 2)
('cmethod : ', 2)
('the number of obj is : ', 2)
------------------------------
('the number of obj is : ', 2)
('cmethod : ', 2)
('the number of obj is : ', 2)
参考
- python基础—-特性(property)、静态方法(staticmethod)、类方法(classmethod)、str的用法
python中classmethod与staticmethod的差异及应用相关推荐
- Python中classmethod与staticmethod区别
classmethod:类方法 staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表 ...
- python中classmethod的用法_Python中的@classmethod是如何使用的?
在写Python程序的时候,特别是实现类方法的时候,通常会用到@staticmethod和@classmethod两种装饰器(function decorator),那这两个装饰器有什么作用呢?在这篇 ...
- python的@classmethod和@staticmethod
本文是对StackOverflow上的一篇高赞回答的不完全翻译,原文链接:meaning-of-classmethod-and-staticmethod-for-beginner Python面向对象 ...
- python中的连续比较是什么_在python中提取连续行之间的差异
你的例子表明你想要在一对线之间进行比较.这与将其定义为line(n-1)-line(n)不同,后者将给出5个结果,而不是3个.在 结果也取决于你认为的差异.它是位置性的,还是仅仅基于奇数行中缺失的字母 ...
- Python中的类、实例以及方法,MRO继承解析顺序以及Mixin类
Contents 1. 什么是类和实例 2. 类的实例方法.类方法和静态方法 3. MRO是什么,描述其查找顺序 4. Mixin是什么,描述其应用场景 5. References 1. 什么是类和实 ...
- python中创建对象后可以使用运算符来调用其成员_《守株待兔》这则寓言告诉我们(...
[简答题]简述质谱技术的原理及组成. (10.0分) [简答题]语句: >>>f=open('myfile.txt','a+') >>> f.write('hehe ...
- Python中抽象类和接口的区别
Python中的抽象类和接口有什么区别? #1楼 用更基本的方式来解释:界面有点像空的松饼盘. 它是一个包含一组没有代码的方法定义的类文件. 抽象类是相同的,但并非所有函数都需要为空. 有些人可以有代 ...
- python中@staticmethod、@classmethod和实例方法
1.形式上的异同点: 在形式上,Python中:实例方法必须有self,类方法用@classmethod装饰必须有cls,静态方法用@staticmethod装饰不必加cls或self,如下代码所示: ...
- python中静态变量和静态方法_【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)...
在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义 ...
最新文章
- 我一不小心把ubuntu里的ps这样的命令删掉了,应该怎么重装呢
- addcontorl error...viewstate relative
- iol植入手术过程_Phaco+IOL植入术病人的护理
- 将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3
- 【Tools】VNC Server 6.7安装详解
- react在组件内插入标签_javascript – 如何将css类添加到react中的组件?
- python 闭包和装饰器
- tab+easyui datagrid无法正常显示
- 下载和安装MyEclipse2014
- 一、用例图、功能模块图、ER图之间的区别和联系
- [Unity]Unity3D游戏引擎游戏开发软件相比与其他的优势
- 开机时小键盘灯不亮的解决方案
- 解密邮件群发小技巧?邮件群发单显功能如何设置?
- Python---面向对象---龟鱼游戏
- BANANA PI 入门:香蕉派如何安装系统
- JAVA接口签名sign生成工具类
- MATLAB连接USRP
- 数据预处理概述和数据清洗
- Genbank的gbff格式转gff3格式
- M1 MacBook 续航太好,苹果以为电量指示器坏了
热门文章
- 砥志研思SVM(四) 序列最小最优化算法(SMO)论文翻译
- [java基础] --- java开发,service层是不是一定要写接口
- 强制消除Xcode警告的方法
- java 常量表达式_JavaSwitch语句:常量表达式是必需的,但它是常量
- 五大质量工具详解及运用案例_掌握质量管理五大工具,实现九段质量管理成长...
- android 将布局多次添加,android – 如何在布局xml中添加循环视图
- 奥的斯电梯tt服务器使用表_奥的斯电梯服务器TT使用说明1
- IOC操作Bean管理注解方式(组件扫描配置)
- centos6安装mysql并远程连接_MySQL5.7数据库安装与远程连接
- ug使用服务器系统,ug服务器设置教程视频