python staticmethod,classmethod方法的使用和区别以及property装饰器的作用
2024-08-27 21:32:33
class Kls(object):
def __init__(self, data):
self.data = data
def printd(self):
print(self.data)
@staticmethod
def smethod(*arg):
print('Static:', arg)
@classmethod
def cmethod(*arg):
print('Class:', arg) >>> ik = Kls(23)
>>> ik.printd()
23
>>> ik.smethod()
Static: ()
>>> ik.cmethod()
Class: (<class '__main__.Kls'>,)
>>> Kls.printd()
TypeError: unbound method printd() must be called with Kls instance as first argument (got nothing instead)
>>> Kls.smethod()
Static: ()
>>> Kls.cmethod()
Class: (<class '__main__.Kls'>,)
以上例子中printd是实例方法,smethod是静态方法,cmethod是类方法,那么他们有什么区别呢
实例方法会将实例自身作为第一个参数传给实例方法
lk.printd()会将lk传给printd方法
类方法
Kls.cmethod()会将Kls传给cmethod方法
当这个方法被调用的时候,我们把类作为第一个参数,而不是那个类的实例(就像我们通常用的方法一样)。这意味着您可以在该方法内使用该类及其属性,而不是特定的实例
静态方法不会传入类或者实例给类方法
当这个方法被调用的时候,我们不会把类的实例传递给它(就像我们通常用的方法一样)。这意味着你可以在一个类中放置一个函数,但是你不能访问那个类的实例(当你的方法不使用实例的时候这是很有用的)
通常的话使用实例方法即可,初始化类实例后,该实例可以调用类中的实例方法,
类方法是提供给类内部使用的,不需要初始化类实例。
静态方法在方法不使用实例是使用
例子链接:https://www.zhihu.com/question/20021164/answer/18224953
Python内置的@property
装饰器就是负责把一个方法变成属性调用的
最新文章
- 从I/O复用谈epoll为什么高效
- 【代码笔记】iOS-获得当前的月的天数
- Node.js的学习--使用cheerio抓取网页数据
- PyQt4软件打包成exe文件
- 恢复drop数据
- EF Code First学习笔记 初识Code First
- Python 基础【第七篇】集合
- 第一节windows系统安装虚拟机VMware 软件
- js实现的文章输入检查与测速。
- H5拖拽 构造拖拽及缩放 pdf展示
- apache一个ip多个端口虚拟主机
- Struts1基础、使用Struts实现登录、使用Struts HTML标签简化开发
- node.js爬取ajax接口数据
- #WEB安全基础 : HTTP协议 | 0x10 扩展HTTP报文结构概念和内容编码
- qt 利用 HTML 生成PDF文档,不能显示jpg图片
- 解决Ubuntu 16.04 上Android Studio2.3上面运行APP时提示DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs的问题
- 安装mysqlclient的时候出现Microsoft Visual C++ 14.0 is required报错
- FasterRCNN代码解读
- gsoap入门:C/C++代码生成及编译--包含soapcpp2 -qname添加命名空间后报错的解决方法--可用
- acl使用示例
热门文章
- Guid is not updated for cluster with specified cluster id; need to wait for hosts in this cluster to come up
- EF6 Working with Proxies ProxyCreationEnabled
- ps aux 状态介绍
- 解决Windows10与Ubuntu系统时间不一致问题
- 转:攻击JavaWeb应用[8]-后门篇
- 循序渐进PYTHON3(十三) --2-- DJANGO之FORM表单(自动生成HTML标签和自定制提示信息)
- Flask实战第44天:完成前台注册功能
- Visual Studio警告IDE0006的解决办法
- BZOJ 1123 [POI2008]BLO(Tarjan算法)
- 【树形dp】hdu6035 Colorful Tree