这是我在Python中遇到的典型模式,但可能适用于大多数其他多范式语言。
我写了一堆函数。其中一些像load_data(),有些像do_something_with_data()。也就是说后者对第一个函数读入的数据起作用。假设读取数据需要1分钟。
过了一会儿,我重构代码,以便这些都是类中的方法。虽然这看起来更整洁,但也很难开发。也就是说,如果我在do_something_with_data()中修复了一个错误,那么已经实例化的对象就不会被修复。我必须重新实例化它,这可能需要一分钟左右,因为它必须读取数据。
object=my_object();object.load_data();object.do_something_with_data()
我想知道是否有一个很好的模式来处理这个问题。您是否可以在不刷新数据的情况下更新对象的方法?我应该编写一个方法来获取旧对象并从已保存的对象复制所有数据字段吗?其他想法?
答案 0 :(得分:2)
在类上查找方法。在模块重新加载时,现有实例最终引用不再存在的类;他们的__class__
指向旧module.classname
的对象,与新module.classname
的对象不同。
您有两种选择:
更新旧课程以获得新方法:
existing_instance.__class__.methodname = module.classname.methodname.__func__
替换现有对象上的类引用:
existing_instance.__class__ = module.classname