Barry A. Warsaw added the comment: On Mar 24, 2016, at 10:31 PM, Martin Panter wrote:
>FWIW I already invented this :) as written in Issue 22247. Although I think I >only used it once or twice in my own personal librarie(s). So it’s a nice >sign that we came up with the same @public name and usage. Cool! Consider that bikeshed painted then. :) >I’m not a fan of hacks depending on the calling frame, and I prefer APIs that >“only do one thing”. So I am okay with accepting an object and work off its >__name__ and __module__, but not okay with also accepting a string and >guessing what module it was defined in. Yes, but it makes it less convenient to add non-"APIs" to __all__, although I guess you can just append it at the point of use: __all__.append('CONST1') CONST1 = 3 Not as pretty, and now you have two ways of doing it. Here's another thought: What if we gave all modules an __all__ automatically, and that was an object that acted like a list but also had an @public decorator. import sys class All(list): def public(self, api): sys.modules[api.__module__].__all__.append(api.__name__) __all__ = All() @__all__.public def foo(): pass @__all__.public class Bar: pass __all__.append('CONST') CONST = 1 print(__all__) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue26632> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com