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文件操作类操作实例详解
Jul 11 Python
跟老齐学Python之Import 模块
Oct 13 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
Python 中字符串拼接的多种方法
Jul 30 Python
python Web开发你要理解的WSGI & uwsgi详解
Aug 01 Python
便捷提取python导入包的属性方法
Oct 15 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
python实现从ftp服务器下载文件
Mar 03 Python
500行python代码实现飞机大战
Apr 24 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 写文本日志实现代码
2010/05/18 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
微信小程序webSocket的使用方法
2020/02/20 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
python的debug实用工具 pdb详解
2019/07/12 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
8种常用的Python工具
2020/08/05 Python
java字符串格式化输出实例讲解
2021/01/06 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
制冷与电控专业应届生求职信
2013/11/11 职场文书
师范教师毕业鉴定
2014/01/13 职场文书
英文留学推荐信范文
2014/01/25 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
购房协议书范本
2014/10/02 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
办公经费申请报告
2015/05/15 职场文书
公司车队管理制度
2015/08/04 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
Pandas 数据编码的十种方法
2022/04/20 Python