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 06 Python
为Python程序添加图形化界面的教程
Apr 29 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
python实现装饰器、描述符
Feb 28 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
python读取各种文件数据方法解析
Dec 29 Python
python实现微信定时每天和女友发送消息
Apr 29 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
Pycharm修改python路径过程图解
May 22 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
在keras里实现自定义上采样层
Jun 28 Python
python 简单的调用有道翻译
Nov 25 Python
Python答题卡识别并给出分数的实现代码
Python 中的单分派泛函数你真的了解吗
Jun 22 #Python
Python实现DBSCAN聚类算法并样例测试
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 #Python
利用Python第三方库实现预测NBA比赛结果
Django实现drf搜索过滤和排序过滤
python生成可执行exe控制Microsip自动填写号码并拨打功能
You might like
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
PHP中文汉字验证码
2007/04/08 PHP
PHP Google的translate API代码
2008/12/10 PHP
PHP 事务处理数据实现代码
2010/05/13 PHP
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP实现微信提现功能
2018/09/30 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
python的文件操作方法汇总
2017/11/10 Python
numpy中索引和切片详解
2017/12/15 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
Python 字符串与数字输出方法
2018/07/16 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
python编写计算器功能
2019/10/25 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
历史系毕业生自荐信
2013/10/28 职场文书
大一新生军训时的自我评价分享
2013/12/05 职场文书
新员工入职感言
2014/02/01 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
校本课程教学计划
2015/01/19 职场文书
项目战略合作意向书
2015/05/08 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python