添加类方法后如何更新类的实例?

2024-04-30

我发现自己陷入了困境,我开发了一个类,然后创建了该类的一个实例。这些类通常会执行数据和统计操作,这些操作需要很长时间,有时需要 20 分钟。

我将继续开发我的类,并向其中添加其他方法。现在,如何使用新方法更新以前的类实例而不重新初始化该类的旧实例(在本例中需要 20 分钟)?


有一点点XY https://meta.stackexchange.com/a/66378/378077问题在这里。 你真正的困难似乎是“需要 20 分钟才能完成__init__演员来完成。”

有几种方法可以摆脱这种困境。

  1. 花费许多分钟计算一个新实例,然后安排将其快速序列化到磁盘。如果反序列化花费的时间少于二十分钟,那么您就赢了!
  2. 使用一定程度的间接,因此具有如此多有趣行为的对象是轻量级的,消耗很少的内存。让它包含指向 RDBMS id、S3 存储桶、url 或文件名的指针。
  3. 将昂贵的对象存储在全局或等效对象中,例如@lru_cache https://docs.python.org/3/library/functools.html#functools.lru_cache,并让您更新/重新加载的类找到它。使用importlib.reload() https://docs.python.org/3/library/importlib.html#importlib.reload.
  4. 与序列化类似,提供廉价的 .copy() 并利用继承。
  5. 猴子补丁。

这是利用继承的一种方法 (复制不是必需的,但可以使其更清晰):

class FooBase:
    ...

# global variable for expensive computation
foo = FooBase()

class FooFeature(FooBase):
    def __init__(self, foo):
        ...
    def some_new_feature(self):
        ...

foo = FooFeature(foo.copy())  # This happens quickly.

这是猴子补丁的一种方法:

class Foo:
    ...

foo = Foo()
FooOriginal = Foo

# Now you edit in a brand new Foo feature and reload the class definition:
    def new_feature(self):
        ...

FooOriginal.new_feature = Foo.new_feature

当猴子补丁时, 注意foo持有对同一类对象的引用FooOriginal成立。 重新加载后,Foo成为一个全新的物体, 使用另一种方法。 最终的猴子补丁分配 使该方法可用FooOriginal, 因此可用于foo.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

添加类方法后如何更新类的实例? 的相关文章

随机推荐

  • Kong - 验证上游 ssl(ssl_proxy 打开)

    我已经成功为 API 安装了 kong 网关 该 API 通过上游负载平衡到多个目标 应用程序服务器 现在 我有一个我的应用程序服务器的自签名证书 kong 和目标之间的 ssl 握手应该失败 我推断 kong 不验证上游证书 经过一些研究
  • JSDoc 这就是将 @typedef 标记为 @global 的方式吗?

    只需确保在我们的节点服务器的模块中这是能够使用的正确方法 typedef整个应用程序 而不是在每个需要的模块 文件中重复它 从文档中我无法确定这是否正确 并且是否有人对存储全局 typedefs 有意见 以便在整个应用程序中使用时很容易找到
  • 带有 unicode 键的字典

    Python 中是否可以使用 Unicode 字符作为字典的键 我使用 Unicode 中的西里尔字母作为键 当尝试通过键获取值时 我得到以下回溯 Traceback most recent call last File baseCreat
  • 如何解析不可预测地散布到字符串中的 JSON?

    假设我有一个 node js 应用程序 它以一种奇怪的格式接收输入 带有任意散布在其中的 JSON 的字符串 如下所示 This is a string with json in it followed by more text and s
  • AsyncTask,doInBackground永远不会在android中运行

    当我尝试启动 doinbackground 来等待传入消息时 它从未真正运行过 只是跳过它 public class Incomingdata extends AsyncTask
  • 将对象解构为数组

    我有这个对象 const foo a kitten b puppy c lion 将其解构为变量就像这样 const a b c foo 是否有一个简单的方法如何将其解构为数组 以便结果是 const array a b c 据我所知 没有
  • Powershell调用cmd.exe命令,如copy /b

    我已经看到这个了在 Powershell 中快速且简单地连接二进制文件 https stackoverflow com questions 1783554 fast and simple binary concatenate files i
  • gcovr 和 Xcode 5 的代码覆盖率不起作用

    我正在使用 gcovr 生成 cobertura 的代码覆盖率 xcode 4 6 一切正常 现在我更新到了 xcode5 我得到的一切都是 0 覆盖率 我的设置 全球冠状病毒3 0 Xcode 5 苹果 LLVM 5 生成测试覆盖率文件
  • 从存储桶中删除文件。 Autodesk-forge

    从 wip dm prod 存储桶中删除文件时出现问题 errorCode AUTH 012 但我可以使用 x GET 而不是 x DELETE 下载当前文件 我使用这个教程 gt https developer autodesk com
  • 将下载进度条从 AsyncTask 更新到通知区域

    我已将异步任务实现到服务中 这是我正在调用的进度通知的初始化onPreExecute mProgressNotificationManager NotificationManager this getSystemService Contex
  • OneDrive上传/下载到指定目录

    我正在尝试使用 Live SDK v5 6 在我的 Windows Phone 8 1 Silverlight 应用程序中包含 OneDrive 的备份 恢复 我可以读 写标准的 me skydrive 目录 但我在寻找上传 下载到指定目录
  • 垂直滑动手势不适用于 UITableView

    我有 UIViewController 并在故事板中添加了 UITableView 后来我向视图添加了向上滑动手势识别器 但什么也没发生 这是我的代码 import UIKit class ViewController UIViewCont
  • iTextSharp - 如何将 PDFPRow 添加到 PDFPTable?

    我想将 PDFPCells 数组添加到 PDFPRow 然后将 PDFPRow 添加到 PDFPTable 但我似乎无法在 PDFPTable 中找到为此的方法 然而有一个 PDFPTable AddCell 有任何想法吗 查看PdfPTa
  • 是否可以将密码以纯文本形式存储在 php 变量或 php 常量中?

    根据问题 在 php 页面上存储密码是否安全 例如 password pa w0rd 如果用户看不到它 那就安全了 对吗 编辑 确实有人建议使用hash 但是数据库服务器连接密码会有问题不是吗 简短的回答是否定的 而且要看情况 以纯文本形式
  • 如何从Java中的sqlite中的多个表中进行选择?

    我正在尝试学习如何在 java 程序中使用 sqlite 数据库 不是安卓 我去了this https bitbucket org xerial sqlite jdbc overview链接 下载 jdbc 库并复制示例 该示例运行正常 没
  • 有什么方法可以处理 HTTP/2 Goaway 在 HttpClient java 中收到的 IOException 吗?

    我在应用程序中进行 API 调用 在某个时候它会随机抛出java io IOException 149 222 1 1 553232 GOAWAY received 使用Java 11环境 无论如何要解决此异常而不是迁移到 Http 1 1
  • Facebook 错误代码列表

    我正在寻找当您尝试使用 Graph API 获取信息时 Facebook 可以返回的所有列表 有人可以帮忙吗 Facebook 返回 400 HTTP 错误和 JSON 内容 例如 error type OAuthException mes
  • 如何使用 PHP 返回 JQuery .ajax() 的正确成功/错误消息?

    我不断收到错误警报 MYSQL 部分没有任何问题 查询被执行 我可以在数据库中看到电子邮件地址 客户端
  • 理解 htonl() 和 ntohl()

    我正在尝试使用 unix 套接字来测试向本地主机发送一些 udp 数据包 据我了解 当设置 ip 地址和端口以发送数据包时 我会填写我的sockaddr in将值转换为网络字节顺序 我在 OSX 上 我很惊讶这个 printf ntohl
  • 添加类方法后如何更新类的实例?

    我发现自己陷入了困境 我开发了一个类 然后创建了该类的一个实例 这些类通常会执行数据和统计操作 这些操作需要很长时间 有时需要 20 分钟 我将继续开发我的类 并向其中添加其他方法 现在 如何使用新方法更新以前的类实例而不重新初始化该类的旧