[Python-Dev] PEP 591 discussion (final qualifier) happening at typing-sig@
Michael Sullivan
sully at msully.net
Tue Apr 16 03:48:20 EDT 2019
More information about the Python-Dev mailing list
Tue Apr 16 03:48:20 EDT 2019
- Previous message (by thread): [Python-Dev] PEP 591 discussion (final qualifier) happening at typing-sig@
- Next message (by thread): [Python-Dev] PEP 591 discussion (final qualifier) happening at typing-sig@
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Mon, Apr 15, 2019 at 8:12 PM Nathaniel Smith <njs at pobox.com> wrote: > On Mon, Apr 15, 2019 at 5:00 PM Michael Sullivan <sully at msully.net> wrote: > > > > I've submitted PEP 591 (Adding a final qualifier to typing) for > discussion to typing-sig [1]. > > I'm not on typing-sig [1] so I'm replying here. > > > Here's the abstract: > > This PEP proposes a "final" qualifier to be added to the ``typing`` > > module---in the form of a ``final`` decorator and a ``Final`` type > > annotation---to serve three related purposes: > > > > * Declaring that a method should not be overridden > > * Declaring that a class should not be subclassed > > * Declaring that a variable or attribute should not be reassigned > > I've been meaning to start blocking subclassing at runtime (e.g. like > [2]), so being able to express that to the typechecker seems like a > nice addition. I'm assuming though that the '@final' decorator doesn't > have any runtime effect, so I'd have to say it twice? > > @typing.final > class MyClass(metaclass=othermod.Final): > ... > > Or on 3.6+ with __init_subclass__, it's easy to define a @final > decorator that works at runtime, but I guess this would have to be a > different decorator? > > @typing.final > @alsoruntime.final > class MyClass: > ... > > This seems kinda awkward. Have you considered giving it a runtime > effect, or providing some way for users to combine these two things > together on their own? > > Nothing else in typing does any type of runtime enforcement, so I'd be reluctant to start here. One approach would be doing something like this (maybe in a support module): if typing.TYPE_CHECKING: from typing import final else: from alsoruntime import final So that at checking time, the typechecker would use the typing final but at runtime we'd get something that does enforcement. (And for the pre-3.6 case, you could maybe use something like six.add_metaclass in order to specify the metaclass as a decorator.) I can add this as an example to the PEP. -sully > -n > > [1] https://github.com/willingc/pep-communication/issues/1 > [2] https://stackoverflow.com/a/3949004/1925449 > > -- > Nathaniel J. Smith -- https://vorpus.org > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20190416/eb1a0795/attachment.html>
- Previous message (by thread): [Python-Dev] PEP 591 discussion (final qualifier) happening at typing-sig@
- Next message (by thread): [Python-Dev] PEP 591 discussion (final qualifier) happening at typing-sig@
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list