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动态加载模块的3种方法
Nov 22 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
python编写猜数字小游戏
Oct 06 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
python实现三阶魔方还原的示例代码
Apr 28 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 adodb操作mysql数据库
2009/03/19 PHP
UCenter Home二次开发指南
2009/05/28 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
vuex存储token示例
2019/11/11 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
Python中的数学运算操作符使用进阶
2016/06/20 Python
python中函数传参详解
2016/07/03 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
互动出版网:专业书籍
2017/03/21 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
拖鞋店创业计划书
2014/01/15 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
亮化工程实施方案
2014/03/17 职场文书
食品安全演讲稿
2014/09/01 职场文书
检讨书范文大全
2015/05/07 职场文书
七一活动主持词
2015/06/29 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
在python中读取和写入CSV文件详情
2022/06/28 Python