如何在模块重新加载后升级Python对象?

时间:2011-12-09 18:51:53

标签: python reload

在重新加载python模块时,并不难,并向您保证新对象将使用新代码,问题出现在现有对象周围。

是否可以升级现有对象以便他们使用新代码?我们可以假设我们知道哪些类被更改了。

但是,有可能在__init__()中添加了一些额外的功能,所以只是复制它们的词典还不够。我考虑的一个可能的解决方案是确保通过执行类似obj = MyClass(obj)的操作来升级这些对象,这意味着__init__应该以这样的方式编写,即如果多次调用它就不会中断。

1 个答案:

答案 0 :(得分:3)

您正在考虑的解决方案非常合理,但我建议添加静态方法来创建对象的更新版本,而不是向__init__()添加其他功能。请考虑以下示例:

class Point(object):
    def __init__(x, y):
        self.x = x
        self.y = y

    @staticmethod
    def init_from_point(obj):
        return Point(obj.x, obj.y)

有了这个,您可以obj = Point.init_from_point(obj)进行更新,而不会使__init__()复杂化。