2011-12-09 53 views
2

虽然重装Python模块不难并且向你保证,新对象将使用新代码,问题就来了围绕现有的对象。如何在模块重新加载后升级Python对象?

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

不过,这可能是一些额外的功能被添加到__init__(),所以只是复制他们的字典还不够。一个可能的解决办法,我认为是要确保这些对象可以通过执行类似obj = MyClass(obj),这意味着__init__应该以这样的方式,它不会打破,如果调用多次写入升级。

回答

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__()复杂的。