当前位置: 首页 > article >正文

@staticmethod、@classmethod

@staticmethod

  1. 静态方法:staticmethod将一个普通函数嵌入到类中,使其成为类的静态方法。静态方法不需要一个类实例即可被调用,同时它也不需要访问类实例的状态。
  2. 参数:静态方法可以接受任何参数,但通常不使用self或cls作为第一个参数。
  3. 访问:由于静态方法不依赖于类实例的状态,因此它们不能修改类或实例的状态。
  4. 用途:当函数与类相关,但其操作不依赖于类状态时,适合使用静态方法

@classmethod

  1. 类方法:classmethod将一个方法绑定到类而非类的实例。类方法通常用于操作类级别的属性。
  2. 参数:类方法至少有一个参数,通常命名为cls,它指向类本身。
  3. 访问:类方法可以修改类的状态,但不能修改实例的状态。
  4. 用途:当方法需要访问或修改类属性,或者需要通过类来创建实例时,适合使用类方法

使用场景

  • 当方法不需要访问任何属性时,使用staticmethod
  • 当方法操作的是类属性而不是实例属性时,使用classmethod

代码示例

class MyClass:
    class_variable = "I'm a class variable."

    def __init__(self, value):
        self.instance_variable = value

    @staticmethod
    def static_method():
        return "Static method called."

    @classmethod
    def class_method(cls):
        return f"Class method called. Class variable: {cls.class_variable}"

# 调用静态方法
MyClass.static_method()

# 调用类方法
MyClass.class_method()

问题

在使用falsk-restful这个框架进行模型部署调用时,发现模型推理时间很快,但是完整的一次请求过程非常耗时。在debug的过程中发现,每次请求调用api接口时,模型的推理类都会被实例化,推理类在构造的时候,会在初始化中加载模型,加载模型的过程是耗时较长的。

fixbug

classs Infer(object):
    def __init__(self, cfg: dict)->None:
        self.cfg = cfg
        self.load_model(self.cfg)

    @classmethod
    def load_model(cls, cfg: dict):
        cls.cfg = cfg
        if not hasattr(cls, "model"):
            cls.model = torch.load("xxx.pt")

通过@classmethod方法初始化模型的加载,相当于创建了一个全局变量,在后续的请求调用中,不会一直重复加载。


http://www.kler.cn/a/421475.html

相关文章:

  • 【JMX JVM监控】Prometheus读取Trino的JMX数据到Grafana展示
  • 我们来学mysql -- 事务并发之脏写(原理篇)
  • 【Linux】应用层协议—HTTP
  • 【CSS in Depth 2 精译_066】11.2 颜色的定义(上)
  • redis核心命令全局命令 + redis 常见的数据结构 + redis单线程模型
  • 【Golang】WaitGroup 实现原理
  • 什么是前端构建工具?比如(Vue2的webpack,Vue3的Vite)
  • echarts地图立体效果,echarts地图点击事件,echarts地图自定义自定义tooltip
  • 工程设计行业内外网文件交换解决方案:FileLink助力高效、安全的跨网协作
  • Linux网络编程之---多线程实现并发服务器
  • 【北京迅为】iTOP-4412全能版使用手册-第三十二章 网络通信-TCP套字节
  • 嵌入式蓝桥杯学习1 点亮LED
  • LabVIEW 队列消息处理器设计
  • 云计算介绍_02(虚拟化、虚拟化类型、虚拟化层架构、容器)
  • 鸿蒙多线程开发——Sendable使用注意事项
  • 【docker】docker compose多容器部署
  • Rain后台权限管理系统,快速开发
  • 我的知识图谱和Neo4j数据库的使用
  • AI×5G 市场前瞻及应用现状
  • 深入探索 HarmonyOS 的 Navigation 组件:灵活的页面管理与动态导航
  • win10-Docker打不开this can prevent Docker from starting. Use at your own risk.
  • 【C++】LeetCode:LCR 022. 环形链表 II
  • 数字图像处理(13):图像裁剪
  • 银河麒麟V10-SP1设置redis开机自启
  • Web安全基础实践
  • 论文阅读:Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris