[Python-3000] Mixing annotations and non-annotations (original) (raw)
Collin Winter collinw at gmail.com
Sun May 21 20:33:34 CEST 2006
- Previous message: [Python-3000] Use cases for type annotations? (WAS: Type parameterization)
- Next message: [Python-3000] Mixing annotations and non-annotations
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 5/21/06, Marcin 'Qrczak' Kowalczyk <qrczak at knm.org.pl> wrote:
Nick Coghlan <ncoghlan at gmail.com> writes:
> Assume the following is true for a type annotation system: > (T,) is equivalent to tuple[T] > (T1, T2) is equivalent to tuple[T1, T2] > (T1, T2, T3) is equivalent to tuple[T1, T2, T3] This is ambiguous: tuple[T1, T2] is the same as tuple[(T1, T2)], i.e. it's a 1-tuple containing a 2-tuple.
tuple[T1, T2] a 2-tuple with element 1 of type T1 and element 2 of type T2. A 1-tuple containing a 2-tuple would be tuple[tuple[T1, T2]].
However, we still need to decide what happens in the case of tuple[(T1, T2)]. Is the (T1, T2) coerced to tuple[T1, T2]?
My vote is "yes", but I don't have a full idea of how this coercion would work. One solution would be to let the metaclass (the one that catches the getitem call on, e.g., tuple) automatically convert non-annotations (using a to-be-decided test for annotation-ness) to annotations. Something like this on the metaclass might do the trick (based on Guido's metaclass sketch):
def getitem(self, arg): newcls = self.class(self.name, (self,), {}) newcls.T = arg if is_annotation(arg) else type(arg)[arg] return newcls
Collin Winter
- Previous message: [Python-3000] Use cases for type annotations? (WAS: Type parameterization)
- Next message: [Python-3000] Mixing annotations and non-annotations
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]