Как обновить объекты Python после перезагрузки модуля? - PullRequest
2 голосов
/ 09 декабря 2011

Хотя перезагрузка модулей python не сложна и уверяет вас, что новые объекты будут использовать новый код, проблема возникает с существующими объектами.

Возможно ли обновить существующие объекты, чтобы они использовали новый код?Можно предположить, что мы знаем, какие классы были изменены.

Тем не менее, возможно, что некоторые дополнительные функции были добавлены к __init__(), поэтому простого копирования их словарей недостаточно.Одним из возможных решений, которое я рассмотрел, было обеспечение того, чтобы эти объекты можно было обновить, выполнив что-то вроде obj = MyClass(obj), что означает, что __init__ должно быть написано таким образом, чтобы оно не сломалось при вызове несколько раз.

1 Ответ

3 голосов
/ 09 декабря 2011

Решение, которое вы рассматриваете, вполне разумно, но я бы предложил добавить статический метод для создания обновленной версии объекта вместо добавления дополнительной функциональности к __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__().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...