有没有一种简单的方法可以“重新加载”对象的方法而不完全重新实例化它?

2024-04-20 01:40:59 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在Python中遇到的典型模式,但可能适用于大多数其他多范式语言。你知道吗

我写了一堆函数。其中一些类似于load\u data(),另一些类似于dou something\u with\u data()。也就是说,后者作用于用第一个函数读入的数据。假设读取数据需要1分钟。你知道吗

过了一会儿,我重构了代码,使它们都是类中的方法。虽然这看起来更整洁,但也更难发展。也就是说,如果我在dou something\u with\u data()中修复了一个bug,那么已经实例化的对象就不会被修复。我必须重新实例化它,这可能需要一分钟左右,因为它必须读取数据。你知道吗

object=my_object();object.load_data();object.do_something_with_data()

我想知道是否有一个好的模式来处理这个问题。你能在不刷新数据的情况下更新对象的方法吗?我是否应该编写一个方法来获取一个旧对象并从一个已保存的对象中复制所有的数据字段?其他想法?你知道吗


Tags: 数据对象实例方法函数dataobjectwith
6条回答

方法在上查找。在模块重新加载时,现有实例最终引用的类不再存在;它们的__class__指向的对象是旧的module.classname,并且与新的module.classname不是同一个对象。你知道吗

您有两种选择:

  1. 更新旧类以使用新方法:

    existing_instance.__class__.methodname = module.classname.methodname.__func__
    
  2. 替换现有对象上的类引用:

    existing_instance.__class__ = module.classname
    

相关问题 更多 >