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 实现归并排序算法
Jun 05 Python
Python yield使用方法示例
Dec 04 Python
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
浅谈Python 对象内存占用
Jul 15 Python
Python在线运行代码助手
Jul 15 Python
Python使用wget实现下载网络文件功能示例
May 31 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
Python实现桌面翻译工具【新手必学】
Feb 12 Python
在python中使用nohup命令说明
Apr 16 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 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 print类函数使用总结
2010/06/25 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
Jquery插件写法笔记整理
2012/09/06 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
跟老齐学Python之集合(set)
2014/09/24 Python
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
Python request操作步骤及代码实例
2020/04/13 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
Python中Qslider控件实操详解
2021/02/20 Python
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
水电站项目建议书
2014/05/12 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
城南旧事电影观后感
2015/06/16 职场文书
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL