Python 有没有一个简单的方法来;“重新加载”;对象';在不完全重新实例化它的情况下,如何创建方法?

Python 有没有一个简单的方法来;“重新加载”;对象';在不完全重新实例化它的情况下,如何创建方法?,python,oop,Python,Oop,这是我在Python中遇到的典型模式,但可能适用于大多数其他多范式语言 我写了很多函数。其中有些类似于加载数据(),有些类似于使用数据做某事()。也就是说,后者作用于使用第一个函数读入的数据。假设读取数据需要1分钟 object=my_object();object.load_data();object.do_something_with_data() 过了一会儿,我重构了代码,使它们都是类中的方法。虽然这看起来更整洁,但也更难发展。也就是说,如果我修复了dou something_with_

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

我写了很多函数。其中有些类似于加载数据(),有些类似于使用数据做某事()。也就是说,后者作用于使用第一个函数读入的数据。假设读取数据需要1分钟

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

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

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

方法在课堂上查阅。在重新加载模块时,现有实例最终会引用一个不再存在的类;它们的
\uuu class\uuu
指向的对象是旧的
模块.classname
,与新的
模块.classname
不是同一个对象

您有两个选择:

  • 更新旧类以使用新方法:

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

    existing_instance.__class__ = module.classname
    

  • 如何重新加载代码?先重新加载(my_模块),然后再重新加载my_模块。my_object()等一般规则如果实例之间共享了一些重的内容,请使用,这样就不必重复生成。谢谢。第二个是我能记得的。经过测试,似乎可以像你说的那样工作。有没有一种方法可以在对象上重新加载一个方法来重新加载模块并更新它自己的类?也许这是循环的。没有自定义代码就不能像我在回答中所说的那样。:-)我认为这不是一种有效的方法。也就是说,您不能只执行object.reload()而不在终端中键入这两行,对吗?在R中,您可以在父作用域中执行,但我不认为您可以在Python中执行。@Dave31415:我的意思是您可以自己编写一个
    reload
    函数来查找要重新加载的模块(
    sys.modules[self.\uuuuuuuuuuu module\uuuuuuuuu]
    ),重新加载该模块,找到类(从
    self.\uuuuuuuu class.\uuuuuu name.\uuuu
    )然后用新版本替换了
    self.\uuuuuu class\uuuuu