Погрузчики классов могут быть сложной проблемой. Вы можете столкнуться с проблемами, если используете несколько загрузчиков классов и не имеете четкого и строгого определения своих взаимодействий. Я думаю, чтобы действительно иметь возможность выгружать класс, который вы собираетесь удалить, нужно удалить все ссылки на какие-либо классы (и их экземпляры), которые вы пытаетесь выгрузить.
Большинство людей, которым необходимо выполнить этот тип предмет в конечном итоге используя OSGi . OSGi действительно мощный и удивительно легкий и простой в использовании,
Если вы исправляете что-то в одном и том же модуле, вы можете использовать __main__
:
from mock import patch
from collections import defaultdict
with patch('__main__.defaultdict'):
d = defaultdict()
print 'd:', d
Если вы что-то делаете для импортированного модуля, вы можете использовать это Имя модуля, поэтому исправлена правильная ссылка (или имя):
# foo.py
from collections import defaultdict
def bar():
return defaultdict()
# foo_test.py
from mock import patch
from foo import bar
with patch('foo.defaultdict'):
print bar()
Дело в том, что патч хочет получить полный путь к патчу. Это просто выглядит немного странно при исправлении чего-либо в текущем модуле, так как люди не часто используют __main__
(или, если уж на то пошло, ссылаются на текущий модуль).