2011-12-09 71 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__()複雜的。