• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-07) 21次浏览 已收录 0个评论

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 @cl<a style="color:transparent">来源gao($daima.com搞@代@#码网</a>assmethod 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使用的资料请关注gaodaima搞代码网其它相关文章!

以上就是python中的class_static的@classmethod的巧妙用法的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python中的class_static的@classmethod的巧妙用法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址