[Python-Dev] Remove typing from the stdlib
Nick Coghlan
ncoghlan at gmail.com
Sun Nov 5 21:18:24 EST 2017
On 4 November 2017 at 02:46, Eric V. Smith <eric at trueblade.com> wrote:
> On 11/3/2017 12:15 PM, Victor Stinner wrote:
>>
>> Hi,
>>
>> 2017-11-03 15:36 GMT+01:00 Guido van Rossum <guido at python.org>:
>>>
>>> Maybe we should remove typing from the stdlib?
>>> https://github.com/python/typing/issues/495
>
>
>> The typing module is not used yet in the stdlib, so there is no
>> technically reason to keep typing part of the stdlib. IMHO it's
>> perfectly fine to keep typing and annotations out of the stdlib, since
>> the venv & pip tooling is now rock solid ;-)
>
>
> I'm planning on using it for PEP 557:
> https://www.python.org/dev/peps/pep-0557/#class-variables
>
> The way the code currently checks for this should still work if typing is
> not in the stdlib, although of course it's assuming that the name "typing"
> really is the "official" typing library.
>
> # If typing has not been imported, then it's impossible for
> # any annotation to be a ClassVar. So, only look for ClassVar
> # if typing has been imported.
> typing = sys.modules.get('typing')
> if typing is not None:
> # This test uses a typing internal class, but it's the best
> # way to test if this is a ClassVar.
> if type(a_type) is typing._ClassVar:
> # This field is a ClassVar. Ignore it.
> continue
>
> See also https://github.com/ericvsmith/dataclasses/issues/14
That particular dependency could also be avoided by defining an
"is_class_var(annotation)" generic function and a "ClassVar" helper
object in the dataclasses module. For example:
class _ClassVar:
def __init__(self, annotation):
self.annotation = annotation
class _MakeClassVar:
def __getitem__(self, key):
return _ClassVar(key)
ClassVar = _MakeClassVar()
@functools.singledispatch
def is_class_var(annotation):
return isinstance(annotation, _ClassVar)
It would put the burden on static analysers and the typing module to
understand that `dataclasses.ClassVar` meant the same thing
conceptually as `typing.ClassVar`, but I think that's OK.
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-Dev
mailing list