On 24/04/2007 0.05, Guido van Rossum wrote: >> This PEP is to change the ``if __name__ == "__main__": ...`` idiom to >> ``if __name__ == sys.main: ...`` so that you at least have a chance >> to execute module in a package that use relative imports. >> >> Ran this PEP past python-ideas. Stopped the discussion there when too >> many new ideas were being proposed. =) I have listed all of them in >> the Rejected Ideas section, although if overwhelming support for one >> comes forward the PEP can shift to one of them. > > I'm -1 on this and on any other proposed twiddlings of the __main__ > machinery. The only use case seems to be running scripts that happen > to be living inside a module's directory, which I've always seen as an > antipattern. To make me change my mind you'd have to convince me that > it isn't.
Sometimes, beginners get confused because of this. They start with a single module, it grows and grows, until they split it into another module. But if the two modules then import each other, there is an asymmetry because one is internally renamed to __main__. For instance: ==== a.py ==== class A: pass if __name__ == "__main__": a = A() print A.__name__ print a.__class__ import b b.run(a) =============== ==== b.py ==== from a import A def run(a): print A print a.__class__ assert isinstance(a, A) # FAIL! ============== $ python a.py A __main__.A a.A __main__.A Traceback (most recent call last): File "a.py", line 9, in ? b.run(a) File "E:\work\b.py", line 6, in run assert isinstance(a, A) # FAIL! AssertionError I think this behaviour confuses many beginners, and it is unnatural for experts too. I've got bitten a few times in the past. I still believe that it would be much easier to just support an explicit __main__ function: ==== a.py ==== class A: pass def __main__(): a = A() print A.__name__ print a.__class__ import b b.run(a) =============== which is easier to read for beginners and let the main module keep its original name, thus not causinng these weird side-effects. -- Giovanni Bajo _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com