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使用正则匹配实现抓图代码分享
Apr 02 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
Python socket实现简单聊天室
Apr 01 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
浅谈python中get pass用法
Mar 19 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
详解Pymongo常用查询方法总结
Jan 29 Python
python实现图片转字符画
Feb 19 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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 foreach 使用&(与运算符)引用赋值要注意的问题
2010/02/16 PHP
php文件操作实例代码
2012/05/10 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
python 进程的几种创建方式详解
2019/08/29 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
工程地质勘察专业大学生求职信
2013/10/13 职场文书
售后主管岗位职责
2013/12/08 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
交通安全责任书范本
2014/07/24 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
客户付款通知书
2015/04/23 职场文书