[Python-ideas] Trial balloon: adding variable type declarations in support of PEP 484
Guido van Rossum
guido at python.org
Mon Aug 8 17:28:54 EDT 2016
On Mon, Aug 8, 2016 at 2:11 PM, אלעזר <elazarg at gmail.com> wrote:
> Feels like named parameters are better off being an OrderedDict in the
> first place.
>
PEP 468.
> NamedTuple pushes OrderedDict to become kind of builtin.
>
Why? Having both in the collections module is good enough.
>
> On Tue, Aug 9, 2016 at 12:09 AM Guido van Rossum <guido at python.org> wrote:
>
>> Hm, overlooking the ordering is kind of a big deal for something with
>> "tuple" in its name. :-)
>>
>> Also it feels like it needs a metaclass instead of a cache.
>>
>> Maybe from this we can learn though that __anotations__ should be an
>> OrderedDict?
>>
>> On Mon, Aug 8, 2016 at 1:58 PM, אלעזר <elazarg at gmail.com> wrote:
>>
>>> class PrototypeNamedTuple:
>>> cache = {}
>>> def __new__(cls, *args):
>>> P = PrototypeNamedTuple
>>> if cls not in P.cache:
>>> P.cache[cls] = typing.NamedTuple(cls.__name__,
>>> cls.__annotations__.items())
>>> return P.cache[cls](*args)
>>>
>>> Works modulo ordering, though I'm not sure that's the right way to do it.
>>>
>>> The ordering part of namedtuple is orthogonal to the
>>> value-type/immutability part. So I would imagine making "Value" for the
>>> latter, "tuple" for the former, and namedtuple is mixing both (possibly
>>> given a convenient name, such as PrototypeNamedTuple). "Value" can also
>>> seen as mixing "Struct" and "Immutable", but that's overdoing it I guess.
>>>
>>> ~Elazar
>>>
>>> On Mon, Aug 8, 2016 at 11:25 PM Guido van Rossum <guido at python.org>
>>> wrote:
>>>
>>>> That's a very interesting idea and one that deserves pursuing (though I
>>>> agree it's not a blocker for the PEP I'm hoping to write). I think the next
>>>> step is to prototype this -- which can only happen once we have an
>>>> implementation of the PEP. Though perhaps you could start by writing a
>>>> prototype that works by having the user write the following:
>>>>
>>>> class Starship(PrototypeNamedTuple):
>>>> damage = 0
>>>> captain = "Kirk"
>>>> __annotations__ = dict(damage=int, captain=str)
>>>>
>>>> It could also benefit from PEP 520 (Preserving Class Attribute
>>>> Definition Order).
>>>>
>>>> Who's game?
>>>>
>>>> --Guido
>>>>
>>>> On Mon, Aug 8, 2016 at 1:13 PM, אלעזר <elazarg at gmail.com> wrote:
>>>>
>>>>> class Starship:
>>>>>> stats: class Dict[str, int] = {} # Pure class variable
>>>>>> damage: class int = 0 # Hybrid class/instance variable
>>>>>> captain: str # Pure instance variable
>>>>>>
>>>>>
>>>>> I can't avoid noting that there is an opportunity here to insert
>>>>> NamedTuple into the core language. The above example is almost there,
>>>>> except it's mutable and without convenient methods. But
>>>>>
>>>>> class Starship(tuple):
>>>>> damage: int = 0
>>>>> captain: str = "Kirk"
>>>>>
>>>>> Is an obvious syntax for
>>>>>
>>>>> Starship = NamedTuple('Starship', [('damage', int), ('captain',
>>>>> str)])
>>>>>
>>>>> Only much more available and intuitive to read, use, and of course -
>>>>> type check.
>>>>> (Of course, it does mean adding semantics to the declaration syntax in
>>>>> general)
>>>>>
>>>>> I'm not really suggesting to make this change now, but I believe it
>>>>> will be done, sooner or later. My brief experience with mypy convinced me
>>>>> that it must be the case. The new declaration syntax only makes it easier.
>>>>>
>>>>> ~Elazar
>>>>>
>>>>> _______________________________________________
>>>>> Python-ideas mailing list
>>>>> Python-ideas at python.org
>>>>> https://mail.python.org/mailman/listinfo/python-ideas
>>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> --Guido van Rossum (python.org/~guido)
>>>>
>>>
>>
>>
>> --
>> --Guido van Rossum (python.org/~guido)
>>
>
--
--Guido van Rossum (python.org/~guido)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20160808/7035f383/attachment-0001.html>
More information about the Python-ideas
mailing list