您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python中的class_static的@classmethod的巧妙用法

51自学网 2021-10-30 22:27:13
  python
这篇教程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_discountapple = 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使用的资料请关注51zixue.net其它相关文章!


Python答题卡识别并给出分数的实现代码
Python自动化测试PO模型封装过程详解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。