чтобы что-то в модуле sys, вы должны знать, что «здесь будут драконы». ;-)
опытке сделать что-то похожее на то, что в рецепте ActiveState под названиемКонстанты в Python Алекс Мартелли, я столкнулся с неожиданным побочным эффектом (в Python 2.7), который назначает экземпляр класса записи вsys.modules
имеет - а именно, что это, по-видимому, меняет значение__name__
вNone
как показано в следующем фрагменте кода (который нарушает часть кода в рецепте):
class _test(object): pass
import sys
print '# __name__: %r' % __name__
# __name__: '__main__'
sys.modules[__name__] = _test()
print '# __name,__: %r' % __name__
# __name__: None
if __name__ == '__main__': # never executes...
import test
print "done"
Я хотел бы понять, почему это происходит. Я не верю, что так было в Python 2.6 и более ранних версиях, так как у меня есть какой-то старый код, где, по-видимому,if __name__ == '__main__':
условно работал, как и ожидалось после назначения (но больше не работает).
FWIW, я также заметил, что имя_test
получает отскок от объекта класса кNone
Тоже после назначения. Мне кажется странным, что они возвращаются кNone
а не исчезнуть совсем ...
Обновить:
Я хотел бы добавить, что любые обходные пути для достижения эффектаif __name__ == '__main__':
, учитывая то, что происходит, будет принята с благодарностью. ТИА!