It's already possible to overload NamedTuple, in a way that will allow the following abuse of notation:
@NamedTuple def Starship(damage:int, captain:str): pass The 'def' is unfortunate and potentially confusing (although it *is* a callable definition), and the ": pass" is meaningless. But I think it is clear and concise if you know what NamedTuple is. Introducing new keyword will of course solve both problems (if there's "async def", why not "type def"? :) ). case class Starship(damage:int, captain:str) Possible variations on the decorator theme: "unordered" namedtuple (note the *) @Value def Starship(*, damage:int, captain:str): pass self-describing (another level of notation abuse): @Type def Starship(damage:int, captain:str) -> NamedTuple: pass On Mon, Aug 8, 2016 at 11:25 PM Guido van Rossum <gu...@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, אלעזר <elaz...@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@python.org >> https://mail.python.org/mailman/listinfo/python-ideas >> Code of Conduct: http://python.org/psf/codeofconduct/ >> > > > > -- > --Guido van Rossum (python.org/~guido) >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/