On 7/2/2017 7:57 AM, Steven D'Aprano wrote:
On Sun, Jul 02, 2017 at 09:38:11PM +1000, Chris Angelico wrote:
On Sun, Jul 2, 2017 at 9:16 PM, Steven D'Aprano <st...@pearwood.info> wrote:
If we want to support that optimization, we could add an optimization
flag that strips annotations at runtime, just as the -OO flag strips
docstrings. That becomes a matter of *consenting adults* -- if you don't
want annotations, you don't need to keep them, but it then becomes your
responsibility that you don't try to use them. (If you do, you'll get a
runtime AttributeError.)

IMO people should act as if this will eventually be the case.
Annotations should be evaluated solely for the purpose of populating
__annotations__, and not for any sort of side effects - just like with
assertions.

Avoiding side-effects is generally a good idea, but I think that's
probably taking it too far.

I think that we should assume that

def func(x:Spam()):
     ...

will always look up and call Spam when the function is defined. But we
should be prepared that

func.__annotations__

might not exist, if we're running in a highly-optimized mode, or
MicroPython, or similar.

Code that does not control the compilation of the file with func should also not assume the existence of func.__doc__. On the other hand, programs, such as IDEs, that do control compilation, by calling the standard compile(), can assume both attributes if they pass the appropriate compile flags.

--
Terry Jan Reedy

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to