Я запускаю интерактивную сессию Python, которая создает большие структуры данных Python (5+ ГБ), для загрузки которых требуется много времени, и поэтому я хочу использовать Python на Максимальное изменение кодов мух способностей (хотя иногда без необходимости слишком много планировать для этого ).
Моя текущая проблема заключается в следующем: у меня есть старый экземпляр класса, который я позже изменил код и перезагрузил модуль - я бы хотел, чтобы старый экземпляр мог использовать новые определения функций. Как мне это сделать, просто не копируя вручную всю информацию из старого экземпляра в новый свежий экземпляр?
Вот что я пробовал. Предположим, у меня есть модуль M.py
:
class A():
def f(self):
print "old class"
Вот интерактивный сеанс:
import M
old_a = M.a()
# [suppose now I change the definition of M.A.f in the source file]
reload(M)
# I attempt to use the new class definition with the old instance:
M.A.f(old_a)
В этот момент я получаю следующую ошибку типа из Python:
TypeError: unbound method f() must be called with A instance as first argument (got A instance instead)
Python явно не рад получить старый экземпляр A, даже если они в основном являются функционально эквивалентными типами (в моем коде) - есть ли способ, которым я мог бы «привести тип» к новому типу экземпляра, чтобы Python мог не жалуетесь? Что-то морально вроде: M.A.f( (M.A) old_a )
?