返回顶部
首页 > 资讯 > 后端开发 > 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://lsjlt.com/news/10995.html(转载时请注明来源链接)

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

猜你喜欢
  • python中的class_static的@classmethod的巧妙用法
    python中的class_static的@classmethod的使用 classmethod的使用,主要针对的是类而不是对象,在定义类的时候往往会定义一些静态的私有属性,但是在使用类的时候可能会对类的私有属性进行...
    99+
    2022-06-02
    python classmethod使用 python class_static
  • Python中的@cache巧妙用法
    目录Python中的@cache有什么妙用?@cache缓存功能介绍@cache的应用场景补充:Python @cache装饰器Python中的@cache有什么妙用? 缓存是一种空...
    99+
    2023-05-15
    Python中@cache Python @cache用法
  • python中的classmethod与staticmethod
    目录1.静态方法(staticmethod)2.类方法(classmethod)为什么会出现classmethod1.静态方法(staticmethod) 静态方法: @static...
    99+
    2024-04-02
  • shell中的source命令的巧妙用法
    首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /...
    99+
    2022-06-04
    巧妙 命令 shell
  • 一文秒懂python中的 \r 与 end=‘’ 巧妙用法
    /r的用法与end=""用法  \r 表示将光标的位置回退到本行的开头位置 end="" 意思是末尾不换行 在python里面,print()函数默认换...
    99+
    2024-04-02
  • 浅谈C++11中=delete的巧妙用法
    目录巧妙用法总结C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数...
    99+
    2024-04-02
  • Python中正则表达式的巧妙用法是怎么样的
    Python中正则表达式的巧妙用法是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 前言正则表达式就是从字符串中发现规律,并通过“抽象”的符号表达出来。打...
    99+
    2023-06-16
  • 巧妙使用RAII中的ScopeExit
    什么是RAII Resource Acquisition Is Initialization,资源获取即初始化,将资源的生命周期与一个对象的生命周期绑定,举例来说就是,把一些资源封装...
    99+
    2024-04-02
  • MyBatis Excutor 拦截器的巧妙用法
    这里要讲的巧妙用法是用来实现在拦截器中执行额外 MyBatis 现有方法的用法。并且会提供一个解决拦截Executor时想要修改MappedStatement时解决并发的问题。这里假设一个场景:实现一个拦截器,记录 MyBatis 所有的 ...
    99+
    2023-05-31
    mybatis excutor 拦截器
  • Python中__str__()的妙用
    目录前言知识点剖析后话前言 这里是Python小技巧的系列文章。这是第三篇,object.__str__(self)方法的妙用。 书接上回,这次还是介绍Python类的内置方法,__...
    99+
    2023-01-28
    Python __str__() Python str
  • Python 中类的构造方法 __New__的妙用
    目录1、概述 2、__new__ 和 __init__ 的区别3、应用1:改变内置的不可变类型4、应用2:实现一个单例5、应用3:客户端缓存6、应用4:不同文件不同的解密方法1、概述...
    99+
    2024-04-02
  • 运用Python巧妙处理Word文档的方法详解
    目录工具生成Word案例读取操作word文档总结工具 python3.7 Pycharm Excel python-docx 生成Word案例 创建一个demo.doc文档,代码如下...
    99+
    2024-04-02
  • Python实用技巧之临时文件的妙用
    目录创建临时文件创建临时目录当我们用Python编写程序时,有时候需要临时存储数据且不希望占用多少内存,亦或是需要写出文件到文件系统供后续程序读取,这些情况下以创建临时文件的方式进行...
    99+
    2023-02-27
    Python临时文件使用 Python临时文件
  • python的calcsize的妙用
      python的struct包让二进制文件的处理变的非常简单,通过unpack可以方便的进行把文件的内容读读取到变量里。   在调用unpack时需要指定两个参数,第一个是读取内容的格式化字符串(如"I32s32sI"),第二个是从文件里...
    99+
    2023-01-31
    妙用 python calcsize
  • golang函数延迟执行的巧妙用法
    go 语言的延迟执行特性允许程序员在函数返回后执行函数调用。其主要用例包括:延迟初始化:延迟初始化大型对象或结构,直至需要时。后置处理:在函数返回后执行清理或后置处理操作。并发编程:安排...
    99+
    2024-04-25
    golang 延迟执行
  • Python:logging 的巧妙设计
    引言 logging 的基本用法网上很多,这里就不介绍了。在引入正文之前,先来看一个需求: 假设需要将某功能封装成类库供他人使用,如何处理类库中的日志? 数年前在一个 C# 开发的项目中,我用了这样的方法:定义一个 logging 基...
    99+
    2023-01-30
    巧妙 Python logging
  • 如何使用Python中的@classmethod实现单例模式
    这篇文章主要介绍了如何使用Python中的@classmethod实现单例模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。@classmethod实现单例模式:class&...
    99+
    2023-06-17
  • AndroidflutterDio锁的巧妙实现方法示例
    目录正文正文 看Dio库源码的时候,发现其拦截器管理的逻辑处用到了一个Lock,这个Lock巧妙地利用了Completer和Future的机制来实现,记录一下。 /// Add lo...
    99+
    2023-01-17
    Android flutter Dio锁 Dio锁
  • 如何巧妙的使用css样式
    今天就跟大家聊聊有关对于一些css样式的巧妙方法进行总结(推荐),可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、块元素水平垂直居中对于一个块元素的...
    99+
    2024-04-02
  • Android中巧妙的实现缓存详解
    前言 缓存有很多的实现方式,技巧性还有坑都很多,今天我给大家介绍一些非通用的方法,可以巧妙地帮大家简单实现一些内存缓存。 Supplier和Memoize SQLite是An...
    99+
    2022-06-06
    缓存 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作