[Python-Dev] PEP 526 ready for review: Syntax for Variable and Attribute Annotations
Guido van Rossum
guido at python.org
Thu Sep 1 16:37:37 EDT 2016
On Thu, Sep 1, 2016 at 9:30 AM, Ivan Levkivskyi <levkivskyi at gmail.com> wrote:
> On 1 September 2016 at 18:21, Steven D'Aprano <steve at pearwood.info> wrote:
[...]
>> Unless I've missed something, there's no way to pre-declare an instance
>> attribute without specifying a type. (Even if that type is Any.) So how
>> about we allow None as a type-hint on its own:
>>
>> NAME: None
>>
>> as equivalent to a declaration *without* a hint. The reader, and the
>> type-checker, can see that there's an instance attribute called NAME,
>> but in the absense of an actual hint, the type will have to be inferred,
>> just as if it wasn't declared at all.
> There is a convention for function annotations in PEP 484 that a missing
> annotation is equivalent to Any, so that I like your first option more.
But Steven wasn't proposing it to mean Any, he was proposing it to
mean "type checker should infer". Where I presume the inference should
be done based on the assignment in __init__ only.
I'm not sure if this needs special syntax (a type checker might behave
the same way without this, so we could just use a comment) but even if
we did decide we wanted to support
NAME: None
for this case, we don't have to change Python, since this already
conforms to the syntax in PEP 526 (the type is None). We'd still have
to update the PEP to tell the authors of type checkers about this
special feature, since otherwise it would mean "NAME has type
NoneType" (remember that PEP 484 defines None as a shortcut for
NoneType == type(None)). But that's not a very useful type for a
variable...
But I'm not in a hurry for that -- I'm only hoping to get the basic
syntax accepted by Python 3.6 beta 1 so that we can start using this
in 5 years from now rather than 7 years from now.
--
--Guido van Rossum (python.org/~guido)
More information about the Python-Dev
mailing list