Franklin? Lee added the comment:

>I don't know, but what practical effect will this have?  I.e. under what
>conditions would you @public wrap a @functools.wraps function and want it to
>show up in __all__?  Do you have a specific use case?

I sometimes wrap functions that return iterators to make functions that return 
lists, because I work on the interpreter a lot. From there, it's not much of a 
stretch to imagine functions which are implemented as decorated versions of 
other functions.

If @public were only to be used as a decorator, it would not be possible to 
have `public` called on a function outside of its definition. But someone might 
call `public(some_decorator(some_function))`.

(@public is really a macro, if you think about it.)

>It would be possible.

(I meant, is it possible for someone to have a non-list __all__?)

If the `.append` fails, I think there should be a meaningful error. Perhaps 
"'__all__' is not a list."

>Sure, we could probably add some heuristics, but I still don't see the need
>for the extra complexity.  The error will be far from the declaration, but the
>exception should make it relatively obvious what's going on.  I also really
>don't think folks would naturally be inclined to put @public on anything but a
>top-level definition.  You wouldn't ever put such a thing in your __all__ so
>why would you decorate it with @public?

I'm thinking of the people who don't read docs and are coming from other 
languages. They'd put `@public` over their method, and one day they'd `import 
*` from that file (whereas they used to only import explicitly), getting an 
error about a name not being defined in their module. "But why would that name 
need to be defined? It's a method."

Or worse, the name of the method just happens to be the same as something in 
some other file, so they'll focus on why that NAME is being expected in THIS 
file.

>Also, I know that I have several cases where constants are actually
>instances.  They could be marker objects like::
>
>    MARKER = object()

(Here's food for thought: A MARKER could be a one-element enum, both 
conceptually and by implementation. Just like how the "bool enum" is 
{True,False} and the "None enum" is {None}.)

----------

_______________________________________
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

Reply via email to