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算法学习之桶排序算法实例(分块排序)
Dec 18 Python
python脚本设置系统时间的两种方法
Feb 21 Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 Python
Python引用类型和值类型的区别与使用解析
Oct 17 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
python实现XML解析的方法解析
Nov 16 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
TensorFlow-gpu和opencv安装详细教程
Jun 30 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
Django多数据库联用实现方法解析
Nov 12 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 URL验证正则表达式
2011/07/19 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
PDO::quote讲解
2019/01/29 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Python的subprocess模块总结
2014/11/07 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
python自动发微信监控报警
2019/09/06 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
大型活动策划方案
2014/01/12 职场文书
2014年个人委托书范本
2014/10/13 职场文书
学校百日安全活动总结
2015/05/07 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电