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的*args和**kwargs用法
Nov 01 Python
使用python调用浏览器并打开一个网址的例子
Jun 05 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
Python编程之属性和方法实例详解
May 19 Python
python中__slots__用法实例
Jun 04 Python
Python解惑之True和False详解
Apr 24 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
python实现静态web服务器
Sep 03 Python
如何理解python中数字列表
May 29 Python
浅析python中的del用法
Sep 02 Python
Python答题卡识别并给出分数的实现代码
Python 中的单分派泛函数你真的了解吗
Jun 22 #Python
Python实现DBSCAN聚类算法并样例测试
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 #Python
利用Python第三方库实现预测NBA比赛结果
Django实现drf搜索过滤和排序过滤
python生成可执行exe控制Microsip自动填写号码并拨打功能
You might like
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
浅谈mint-ui 填坑之路
2017/11/06 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
Python基本数据类型详细介绍
2014/03/11 Python
python端口扫描系统实现方法
2014/11/19 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
python之pandas用法大全
2018/03/13 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
python自定义函数def的应用详解
2020/06/03 Python
python 调用Google翻译接口的方法
2020/12/09 Python
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
nohup的用法
2012/11/26 面试题
英智兴达软件测试笔试题
2016/10/12 面试题
电影雷锋观后感
2015/06/10 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
Redis实现短信验证码登录的示例代码
2022/06/14 Redis