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实现的圆形绘制(画圆)示例
Jan 31 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
简单了解Python3里的一些新特性
Jul 13 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
如何真正的了解python装饰器
Aug 14 Python
python中entry用法讲解
Dec 04 Python
Python答题卡识别并给出分数的实现代码
Python 中的单分派泛函数你真的了解吗
Jun 22 #Python
Python实现DBSCAN聚类算法并样例测试
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 #Python
利用Python第三方库实现预测NBA比赛结果
Django实现drf搜索过滤和排序过滤
python生成可执行exe控制Microsip自动填写号码并拨打功能
You might like
PHP4与PHP5的时间格式问题
2008/02/17 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
javascript时间差插件分享
2016/07/18 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
python添加模块搜索路径方法
2017/09/11 Python
python数据结构之列表和元组的详解
2017/09/23 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
在python image 中实现安装中文字体
2020/05/16 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
一年级语文教学反思
2014/02/13 职场文书
2014年教师工作总结
2014/11/10 职场文书
元宵节寄语大全
2015/02/27 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
java实现web实时消息推送的七种方案
2022/07/23 Java/Android