【问题标题】:How to upgrade Python objects after module reloading?模块重新加载后如何升级 Python 对象?
【发布时间】:2012-01-17 00:38:54
【问题描述】:

虽然重新加载 python 模块并不难,并确保新对象将使用新代码,但问题在于现有对象。

是否可以升级现有对象以使用新代码?我们可以假设我们知道哪些类发生了变化。

不过,__init__() 有可能添加了一些额外的功能,所以仅仅复制他们的字典是不够的。我考虑的一种可能的解决方案是确保可以通过执行obj = MyClass(obj) 之类的操作来升级这些对象,这意味着__init__ 的编写方式应该是在多次调用时不会中断。

【问题讨论】:

    标签: python reload


    【解决方案1】:

    您正在考虑的解决方案是完全合理的,但我建议添加一个静态方法来创建对象的更新版本,而不是向__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__()复杂化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 2018-12-19
      相关资源
      最近更新 更多