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中异常捕获方法详解
Mar 03 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
numpy数组之存取文件的实现示例
May 24 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
django框架防止XSS注入的方法分析
Jun 21 Python
超简单的Python HTTP服务
Jul 22 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
python filecmp.dircmp实现递归比对两个目录的方法
May 22 Python
python如何更新包
Jun 11 Python
Python实现异步IO的示例
Nov 05 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实现用户认证及管理完全源码
2007/03/11 PHP
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
Python实现备份文件实例
2014/09/16 Python
python根据url地址下载小文件的实例
2018/12/18 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
基于Pytorch SSD模型分析
2020/02/18 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
幼儿园元旦家长感言
2014/02/27 职场文书
专家推荐信模板
2014/05/09 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
2022年显卡天梯图(6月更新)
2022/06/17 数码科技