• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python中的class_static的@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使用的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • Python classmethod装饰器原理及用法解析
    • Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
    • python @classmethod 的使用场合详解
    • 对Python中的@classmethod用法详解
    • 基于python中staticmethod和classmethod的区别(详解)
    上一篇:Python答题卡识别并给出分数的实现代码
    下一篇:Python自动化测试PO模型封装过程详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python中的class_static的@classmethod的巧妙用法 python,中的,class,static,的,