这两个装饰器是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的心得相关推荐

  1. python classmethod static_python @classmethod 和 @staticmethod

    python中有三种调用method的方法:普通method,staticmethod和classmethod 正常的类对象,self, 而classmethod要传入类, staticmethod不 ...

  2. python中的@classmethod的作用

    推荐 <Python 中的 classmethod 和 staticmethod 有什么具体用途?> 一.简介 1.1 描述 classmethod 修饰符对应的函数不需要实例化,不需要 ...

  3. python classmethod_对Python中的@classmethod用法详解

    在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法. 总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的. 不过还是好奇去查了一下. 大致可以 ...

  4. 关于Python中的classmethod

    Python 中的 classmethod classmethod: 作用是直接将自己的类对象,传给类方法. 一.classmethod 1)不用classmethod的时候 你的代码可能是这样写的, ...

  5. Python字符串的encode与decode研究心得乱码问题解决方法

    Python字符串的encode与decode研究心得乱码问题解决方法 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成"\xe4\xb8\xad\xe6\x96 ...

  6. 百度深度学习paddlepaddle7日打卡——Python小白逆袭大神学习心得

    百度深度学习paddlepaddle7日打卡--Python小白逆袭大神学习心得 7日学习总结 第一天作业 第二天作业 第三天作业 第四天作业 第五天作业 7日学习总结 通过这7日打卡课程的学习,从小 ...

  7. python知识:@classmethod和@staticmethod的异同

    1 说明 @staticmethod的意思就是将后面的函数转化成静态函数. 大多数情况,@classmethod和@staticmethod效果一样.但是那不是正题,正式作用是类工厂,如果有类继承关系 ...

  8. python中@staticmethod_Python中的@staticmethod和@classmethod的区别

    一直搞不明白,类方法和静态方法的区别,特意研究了一下,跟大家分享一下. 为了方便大家了解两者的差别,以下的示例代码将有助于发现其中的差别: class A(object): def foo(self, ...

  9. python静态方法的作用_@staticmethod和@classmethod如何作用于python中的...

    您的类方法和静态方法都只能更改类级变量.问题是这样做时,您已经在实例变量s1中隐藏了类变量num: s1.num = s1.num + 5 这将创建一个实例变量,该实例变量遮盖了实例名称空间中的类变量 ...

最新文章

  1. Deployment
  2. 遍历百万级Redis的键值的曲折经历
  3. 程序员因中年危机从北京回老家事业单位:工资从60万爆降到6万
  4. 百度工程师深度好文, 横评3大企业级区块链技术平台
  5. android 仿ios tabs,React Native兼容iOS Android的TabBar
  6. hoj 2739 中国邮局问题
  7. c盘所有的html文件全删,我将C盘文件夹全删了
  8. 从头学习linux C 冒泡法排序
  9. oracle保存type类型,oracle type类型
  10. 计算机视觉实战(八)直方图与傅里叶变换
  11. 日语输入法电脑版_攻略!教你如何用手机打日语
  12. charles破解版_Charles抓包工具_charles mac\win7版
  13. 轻松实现微信、QQ防撤回
  14. 用这本书《现在,发现你的优势》,识别了自己的典型优势
  15. ico图标概述 附生成链接
  16. 关于使用js的setAttribute和getAttribute取dom属性在ie ff safri下的问题
  17. 我的读书笔记 -《鬼谷子》
  18. Android 改变View的中心点
  19. [SCI][计算机视觉][图像处理]一二三四区期刊(自用)
  20. C++ Reference: Standard C++ Library reference: C Library: cstdio: fgetc

热门文章

  1. 解决SQL server不支持utf8,php却用utf8的矛盾问题
  2. MySQL5.7报错[ERROR] Unix socket lock file is empty /tmp/mysql.sock.lock的解决方法
  3. 【白皮书】中国高端制造投融资白皮书.pdf(附下载链接)
  4. 【报告分享】5G时代新型基础设施建设白皮书.pdf
  5. Facebook AI研究员田渊栋:2021年年终总结
  6. php sql慢查询,一个用户SQL慢查询分析,原因及优化_MySQL
  7. Leetcode每日一题:141.linked-list-cycle(环形链表)
  8. 吴恩达机器学习1——单变量线性回归、梯度下降
  9. Java并发(七)——并发容器
  10. 学phython的小笔记