python classmethod static_python classmethod和 staticmethod的心得
这两个装饰器是Python自带的,虽然一直都知道装饰器是怎么用的,但是确实不知道何时去使用它们,今天看到某人用到了,又看了一遍,才有所收货.
其实我们几乎可以不用这两个装饰器,总有办法解决问题,所以让我定义装饰起的用途,那么就一点,让代码变得整洁,少些代码.
以前我一直不知道classmethod的用法,有它没它都是一样,举个例子class A(object):
bar = 1
def foo(self):
print 'foo'
@classmethod
def class_foo(cls):
print 'class_foo'
print cls.bar
cls().foo()
上面代码如果添加了装饰器@classmethod
就这样来调用:A.class_foo()
如果没有装饰器就这样写class A(object):
bar = 1
def foo(self):
print 'foo'
def class_foo(self):
print 'class_foo'
print bar
self.foo()
a=A()
a.class_foo()
其实看起来没多大差别,甚至没有变得更优雅,仿佛不知道是不是真有什么特殊效果,其实是有的.一般会有几种情况适合使用classmethod装饰器
1某个类实例化会实例化太多的数据,而你只用某个方法用classmethod就可以绕过去
2当有两个类的时候,一个类只是懒得再写一遍某个方法,调用另外一个类的方法却又不想实例化,或者说只是想让代码看起来更好看
staticmethod装饰器其实比较好理解,还是先看例子,有装饰器的用法class A(object):
bar = 1
def foo(self):
print 'foo'
@staticmethod
def static_foo():
print 'static_foo'
print A.bar
A.static_foo()
相同代码没有用装饰器class B(object):
bar = 1
def foo(self):
print 'foo'
def static_foo(self):
print 'static_foo'
print bar
b=B()
b.static_foo()
看起来也没多大差别,但是a=A()是没有实例化static_foo()的,b=B()却实例化了static_foo,看起来仿佛没什么用,其实是没什么用,从代码角度来看,只是可以少实例化一些方法吧,别人都说符合oop思想,我就没多大感悟了,但是建议少用.
python classmethod static_python classmethod和 staticmethod的心得相关推荐
- python classmethod static_python @classmethod 和 @staticmethod
python中有三种调用method的方法:普通method,staticmethod和classmethod 正常的类对象,self, 而classmethod要传入类, staticmethod不 ...
- python中的@classmethod的作用
推荐 <Python 中的 classmethod 和 staticmethod 有什么具体用途?> 一.简介 1.1 描述 classmethod 修饰符对应的函数不需要实例化,不需要 ...
- python classmethod_对Python中的@classmethod用法详解
在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法. 总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的. 不过还是好奇去查了一下. 大致可以 ...
- 关于Python中的classmethod
Python 中的 classmethod classmethod: 作用是直接将自己的类对象,传给类方法. 一.classmethod 1)不用classmethod的时候 你的代码可能是这样写的, ...
- Python字符串的encode与decode研究心得乱码问题解决方法
Python字符串的encode与decode研究心得乱码问题解决方法 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成"\xe4\xb8\xad\xe6\x96 ...
- 百度深度学习paddlepaddle7日打卡——Python小白逆袭大神学习心得
百度深度学习paddlepaddle7日打卡--Python小白逆袭大神学习心得 7日学习总结 第一天作业 第二天作业 第三天作业 第四天作业 第五天作业 7日学习总结 通过这7日打卡课程的学习,从小 ...
- python知识:@classmethod和@staticmethod的异同
1 说明 @staticmethod的意思就是将后面的函数转化成静态函数. 大多数情况,@classmethod和@staticmethod效果一样.但是那不是正题,正式作用是类工厂,如果有类继承关系 ...
- python中@staticmethod_Python中的@staticmethod和@classmethod的区别
一直搞不明白,类方法和静态方法的区别,特意研究了一下,跟大家分享一下. 为了方便大家了解两者的差别,以下的示例代码将有助于发现其中的差别: class A(object): def foo(self, ...
- python静态方法的作用_@staticmethod和@classmethod如何作用于python中的...
您的类方法和静态方法都只能更改类级变量.问题是这样做时,您已经在实例变量s1中隐藏了类变量num: s1.num = s1.num + 5 这将创建一个实例变量,该实例变量遮盖了实例名称空间中的类变量 ...
最新文章
- Deployment
- 遍历百万级Redis的键值的曲折经历
- 程序员因中年危机从北京回老家事业单位:工资从60万爆降到6万
- 百度工程师深度好文, 横评3大企业级区块链技术平台
- android 仿ios tabs,React Native兼容iOS Android的TabBar
- hoj 2739 中国邮局问题
- c盘所有的html文件全删,我将C盘文件夹全删了
- 从头学习linux C 冒泡法排序
- oracle保存type类型,oracle type类型
- 计算机视觉实战(八)直方图与傅里叶变换
- 日语输入法电脑版_攻略!教你如何用手机打日语
- charles破解版_Charles抓包工具_charles mac\win7版
- 轻松实现微信、QQ防撤回
- 用这本书《现在,发现你的优势》,识别了自己的典型优势
- ico图标概述 附生成链接
- 关于使用js的setAttribute和getAttribute取dom属性在ie ff safri下的问题
- 我的读书笔记 -《鬼谷子》
- Android 改变View的中心点
- [SCI][计算机视觉][图像处理]一二三四区期刊(自用)
- C++ Reference: Standard C++ Library reference: C Library: cstdio: fgetc
热门文章
- 解决SQL server不支持utf8,php却用utf8的矛盾问题
- MySQL5.7报错[ERROR] Unix socket lock file is empty /tmp/mysql.sock.lock的解决方法
- 【白皮书】中国高端制造投融资白皮书.pdf(附下载链接)
- 【报告分享】5G时代新型基础设施建设白皮书.pdf
- Facebook AI研究员田渊栋:2021年年终总结
- php sql慢查询,一个用户SQL慢查询分析,原因及优化_MySQL
- Leetcode每日一题:141.linked-list-cycle(环形链表)
- 吴恩达机器学习1——单变量线性回归、梯度下降
- Java并发(七)——并发容器
- 学phython的小笔记