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

 更新时间:2021年06月21日 19:19:54   作者:peterpan--1998  
python中的class_static的@classmethod的使用 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使用的资料请关注脚本之家其它相关文章!

相关文章

  • 无需压缩软件,用python帮你操作压缩包

    无需压缩软件,用python帮你操作压缩包

    这篇文章主要介绍了如何用python帮你操作压缩包,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • python面向对象值元类的声明周期详解

    python面向对象值元类的声明周期详解

    这篇文章主要介绍python的元类生命周期,我们可以和之前探讨类的生命中周期一样,我们写一个案例,使用print来输出一些信息,来判断如果基于元类而言,那么生命周期是怎么样的,文中有详细的代码示例,需要的朋友可以参考下
    2023-05-05
  • python合并多个excel的详细过程

    python合并多个excel的详细过程

    合并需求很多,常见的有相同数据结构,按行进行纵向拼接,下面这篇文章主要给大家介绍了关于python合并多个excel的相关资料,需要的朋友可以参考下
    2022-10-10
  • python numpy库介绍

    python numpy库介绍

    这篇文章主要介绍了python numpy库,numpy是一个开源的python科学计算扩展库,主要用来处理任意维度数组和矩阵。相同的任务,使用numpy比直接用python的基本数据结构更加简单高效,下面一起进入文章了解更多详细内容吧
    2021-12-12
  • pandas.dataframe按行索引表达式选取方法

    pandas.dataframe按行索引表达式选取方法

    今天小编就为大家分享一篇pandas.dataframe按行索引表达式选取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 利用Pandas读取文件路径或文件名称包含中文的csv文件方法

    利用Pandas读取文件路径或文件名称包含中文的csv文件方法

    今天小编就为大家分享一篇利用Pandas读取文件路径或文件名称包含中文的csv文件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python使用Word2Vec进行情感分析解析

    python使用Word2Vec进行情感分析解析

    这篇文章主要介绍了python使用Word2Vec进行情感分析解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 使用Python合并Excel文件中的多个Sheet的实现过程

    使用Python合并Excel文件中的多个Sheet的实现过程

    在Python中,可以使用pandas库来处理Excel文件,将多个工作表(sheets)合并为一个工作表,以下是一个详细的代码示例,展示了如何实现这一功能,文中有相关的代码供大家参考,需要的朋友可以参考下
    2024-10-10
  • Python详解复杂CSV文件处理方法

    Python详解复杂CSV文件处理方法

    这篇文章主要介绍了Python数据读写之Python读写CSV文件,CSV即逗号分隔值,一种以逗号分隔按行存储的文本文件,所有的值都表现为字符串类型,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-07-07
  • python输出100以内的质数与合数实例代码

    python输出100以内的质数与合数实例代码

    本文通过实例代码给大家介绍了python输出100以内的质数与合数的方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07

最新评论