Вы должны перезагрузить свой модуль из свежего кода, получить класс и назначить его обратно экземпляру:
import sys
def update_class(instance):
cls=instance.__class__
modname=cls.__module__
del sys.modules[modname]
module=__import__(modname)
instance.__class__=getattr(module,cls.__name__)
При разработке и обновлении кода вы можете использовать тот же трюк для определения экземпляров, которыеперезагрузите их класс в любое время, когда они используются.
import sys
class ObjDebug(object):
def __getattribute__(self,k):
ga=object.__getattribute__
sa=object.__setattr__
cls=ga(self,'__class__')
modname=cls.__module__
mod=__import__(modname)
del sys.modules[modname]
reload(mod)
sa(self,'__class__',getattr(mod,cls.__name__))
return ga(self,k)
class A(ObjDebug):
pass
a=A()
Если вы отредактируете код A, чтобы добавить метод, то вы можете использовать его, не создавая экземпляр снова.создавать неприятные ошибки, для которых некоторые символы становятся объектами None от одной строки к другой.(не понятно почему)