Franklin? Lee added the comment:
>>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))`.
>
>Do you mean, they'd call this is some module other than the one some_function
>was defined in? I don't know that this is a use case we even want to support.
I mean they'd define their own function as a wrapped version of another
function.
>That's true in a sense. It doesn't change the decorated thing at all. I
>think it's important to keep in mind that @public isn't the only way to add to
>__all__.
I mean more in that it acts in the scope of its caller, rather than its
definition.
>You should get something like:
>
>AttributeError: 'tuple' object has no attribute 'append'
>
>which seems pretty obvious.
I don't think the C version shows a traceback, so it won't be clear that you're
trying to assign to `__all__`.
When I rewrote `public` from memory, I wrote it something like this:
try:
dunder_all.append(name)
except TypeError:
module.__all__ = [*dunder_all, name]
>Well, consenting adults and all. I'm not sure we need to protect ourselves so
>strictly against people who don't read the docs and don't understand Python
>(i.e. random cargo-culters).
Python is a popular learning language, and many will be students who haven't
yet trained to reflexively look up docs. I saw the lack of such habits in
Python's IRC channel.
"Consenting adults", I feel, is a reason to grant power: don't stop people from
doing something they might need to do. But @public on a class method is just an
error.
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue26632>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com