чтобы что-то в модуле 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__':, учитывая то, что происходит, будет принята с благодарностью. ТИА!

Ответы на вопрос(2)

Ваш ответ на вопрос