[Python-Dev] Is static typing still optional?
Eric V. Smith
eric at trueblade.com
Tue Dec 26 21:20:45 EST 2017
More information about the Python-Dev mailing list
Tue Dec 26 21:20:45 EST 2017
- Previous message (by thread): [Python-Dev] Is static typing still optional?
- Next message (by thread): [Python-Dev] Is static typing still optional?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 12/21/2017 6:36 AM, Ivan Levkivskyi wrote: > On 21 December 2017 at 11:22, Terry Reedy <tjreedy at udel.edu > <mailto:tjreedy at udel.edu>> wrote: > > On 12/21/2017 4:22 AM, Eric V. Smith wrote: > > On 12/21/2017 1:46 AM, Chris Barker wrote: > > > I suggest that it be clear in the docs, and ideally in the > PEP, that the dataclass decorator is using the *annotation" > syntax, and that the the only relevant part it uses is that > an annotation exists, but the value of the annotation is > essentially (completely?) ignored. > > > I think the PEP is very clear about this: "The dataclass > decorator examines the class to find fields. A field is defined > as any variable identified in __annotations__. That is, a > variable that has a type annotation. With two exceptions > described below, none of the Data Class machinery examines the > type specified in the annotation." > > > This seems clear enough. It could come after describing what a > dataclass *is*. > > I agree the docs should also be clear about this. > > > > So we should have examples like: > > @dataclass > class C: > a: ... # field with no default > b: ... = 0 # filed with a default value > > Then maybe: > > @dataclass > class C: > a: "the a parameter" # field with no default > b: "another, different parameter" = 0.0 # field with a > default > > Then the docs can go to say that if the user wants to > specify a type for use with a static type checking > pre-processor, they can do it like so: > > @dataclass > class C: > a: int # integer field with no default > b: float = 0.0 # float field with a default > > And the types will be recognized by type checkers such as mypy. > > And I think the non-typed examples should go first in the docs. > > > Module some bike-shedding, the above seems pretty good to me. > > > For me, the three options for "don't care" have a bit different meaning: > > * typing.Any: this class is supposed to be used with static type > checkers, but this field is too dynamic > * ... (ellipsis): this class may or may not be used with static type > checkers, use the inferred type in the latter case > * "field docstring": this class should not be used with static type checkers > > Assuming this, the second option would be the "real" "don't care". If > this makes sense, > then we can go the way proposed in > https://github.com/python/typing/issues/276 and make ellipsis semantics > "official" in PEP 484. > (pending Guido's approval) In https://github.com/ericvsmith/dataclasses/issues/2#issuecomment-353918024, Guido has suggested using `object`, which has the benefit of not needing an import. And to me, it communicates the "don't care" aspect well enough. I do understand the difference if you're using a type checker (see for example https://stackoverflow.com/questions/39817081/typing-any-vs-object), but if you care about that, use typing.Any. Eric.
- Previous message (by thread): [Python-Dev] Is static typing still optional?
- Next message (by thread): [Python-Dev] Is static typing still optional?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list