iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中的class_static的@classmethod的巧妙用法
  • 710
分享到

python中的class_static的@classmethod的巧妙用法

pythonclassmethod使用pythonclass_static 2022-06-02 22:06:09 710人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

python中的class_static的@claSSMethod的使用 classmethod的使用,主要针对的是类而不是对象,在定义类的时候往往会定义一些静态的私有属性,但是在使用类的时候可能会对类的私有属性进行

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 classmethod用法

需求:添加类对象属性,在新建具体对象时使用该变量


class A():
 
    def __init__(self,name):
        self.name = name
        self.config = {'batch_size':A.bs}
    @classmethod
    def set_bs(cls,bs):
        cls.bs = bs
    def print_config(self):
        print (self.config)
 
A.set_bs(4)
a = A('test')
a.print_config()

以上就是python中的class_static的@classmethod的使用的详细内容,更多关于python classmethod使用的资料请关注编程网其它相关文章!

--结束END--

本文标题: python中的class_static的@classmethod的巧妙用法

本文链接: https://www.lsjlt.com/news/10995.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作