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中使用动态变量名的方法
May 06 Python
Python中每次处理一个字符的5种方法
May 21 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
python利用小波分析进行特征提取的实例
Jan 09 Python
Python同步遍历多个列表的示例
Feb 19 Python
12个步骤教你理解Python装饰器
Jul 01 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
Python线程指南分享
Nov 19 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
python实现扫雷小游戏
Apr 24 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 Python
Python运算符+与+=的方法实例
Feb 18 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代码
2012/07/14 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
php中Snoopy类用法实例
2015/06/19 PHP
js css后面所带参数含义介绍
2013/08/18 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python查找第k小元素代码分享
2013/12/18 Python
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python元字符的用法实例解析
2018/01/17 Python
python3.4中清屏的处理方法
2020/07/06 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
学生安全教育材料
2014/02/14 职场文书
体育教学随笔感言
2014/02/24 职场文书
护士毕业实习感言
2014/03/05 职场文书
2014年清明节寄语
2014/04/03 职场文书
离婚协议书格式
2014/11/21 职场文书
道歉情书大全
2015/05/12 职场文书
老干部座谈会主持词
2015/07/03 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
python周期任务调度工具Schedule使用详解
2021/11/23 Python
ubuntu安装jupyter并设置远程访问的实现
2022/03/31 Python