Вопрос

Я пытаюсь реализовать динамические объекты перезагрузки в Python, которые отражают изменения кода в прямом эфире.

Модули перезагрузка работает, но я должен воссоздать каждый экземпляр классов модулей, чтобы изменения стали эффективными.

Проблема в том, что объекты (объекты (объекты __dict__ Содержание) теряется во время процесса.

Итак, я попробовал еще один подход:

def refresh(obj, memo=None):
    if memo is None:
        memo = {}
    d = id(obj)
    if d in memo:
        return
    memo[d] = None
    try:
        obj.__class__ = getattr(sys.modules[obj.__class__.__module__], 
                obj.__class__.__name__)
    except TypeError:
        return
    for item in obj.__dict__.itervalues():
        if isinstance(item, dict):
            for k, v in item.iteritems():
                refresh(k, memo)
                refresh(v, memo)
        elif isinstance(item, (list, tuple)):
            for v in item:
                refresh(v, memo)
        else:
            refresh(item, memo)

И удивительно это работает! После вызова обновления () на моих объектах новый код становится эффективным, без необходимости воссоздать их.

Но я не уверен, является ли это правильным способом пересечения объекта? Есть ли лучший способ пересечь компоненты объекта?

Это было полезно?

Решение

Видеть этот рецепт В кулинарной книге Python (или, может быть, даже лучше ее версии в «печатной», которая, я полагаю, вы можете бесплатно читать с поиском Google Book или, конечно, на сайте O'Reilly's "Safari", используя бесплатную 1-недельную пробную версию Подписка - я много редактировал оригинальный рецепт Гудзона, чтобы получить версию «Печать книги»!).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top