python中的class_static的@classmethod的巧妙用法


Posted in Python onJune 22, 2021

python中的class_static的@classmethod的使用 classmethod的使用,主要针对的是类而不是对象,在定义类的时候往往会定义一些静态的私有属性,但是在使用类的时候可能会对类的私有属性进行修改,但是在没有使用class method之前对于类的属性的修改只能通过对象来进行修改,这是就会出现一个问题当有很多对象都使用这个属性的时候我们要一个一个去修改对象吗?答案是不会出现这么无脑的程序,这就产生classmethod的妙用。请看下面的代码:

class Goods:
    __discount = 0.8
    def __init__(self,name,money):
        self.__name = name
        self.__money = money
    @property
    def price(self):
        return self.__money*Goods.__discount
    @classmethod
    def change(cls,new_discount):#注意这里不在是self了,而是cls进行替换
        cls.__discount = new_discount

apple = Goods('苹果',5)
print(apple.price)
Goods.change(0.5) #这里就不是使用apple.change()进行修改了
print(apple.price)

上面只是简单的列举了class method的一种使用场景,后续如果有新的会持续更新本篇文章 2.既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢

从它们的使用上来看,
@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。
下面上代码。

class A(object):  
    bar = 1  
    def foo(self):  
        print 'foo'  

    @staticmethod  
    def static_foo():  
        print 'static_foo'  
        print A.bar  

    @classmethod  
    def class_foo(cls):  
        print 'class_foo'  
        print cls.bar  
        cls().foo()  
###执行  
A.static_foo()  
A.class_foo()

以上就是python中的class_static的@classmethod的使用的详细内容,更多关于python classmethod使用的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python监控网卡流量并使用graphite绘图的示例
Apr 27 Python
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
Python的组合模式与责任链模式编程示例
Feb 02 Python
python字符串连接方法分析
Apr 12 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
python数据结构之链表的实例讲解
Jul 25 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
基于python中theano库的线性回归
Aug 31 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
在python中画正态分布图像的实例
Jul 08 Python
Form表单及django的form表单的补充
Jul 25 Python
Python答题卡识别并给出分数的实现代码
Python 中的单分派泛函数你真的了解吗
Jun 22 #Python
Python实现DBSCAN聚类算法并样例测试
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 #Python
利用Python第三方库实现预测NBA比赛结果
Django实现drf搜索过滤和排序过滤
python生成可执行exe控制Microsip自动填写号码并拨打功能
You might like
php输出xml格式字符串(用的这个)
2012/07/12 PHP
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
vue根据值给予不同class的实例
2018/09/29 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
数字化校园建设方案
2014/05/03 职场文书
农村文化活动总结
2014/08/28 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA