GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||
GeezerVison is showing github.com — gh-104050: Argument clinic: improve typing around adding C converters by AlexWaygood · Pull Request #107209 · python/cpython Conversation
|
| CConverterClassT = TypeVar("CConverterClassT", bound=type["CConverter"]) | ||
|
|
||
| def add_c_converter( | ||
| f: type[CConverter], | ||
| f: CConverterClassT, | ||
| name: str | None = None | ||
| ) -> type[CConverter]: | ||
| ) -> CConverterClassT: |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
By using a TypeVar here (and with the other functions in this PR), we can make the annotation much more expressive.
The annotation currently says "you put in an object f that's some subtype of type[CConverter], and you get out an object that's some subtype of type[CConverter].
The new annotation, by contrast, says, "you put in an object f, and you get out an object that has the same type as whatever the type of f is, as long as the type of f is a subtype of type[CConverter].
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
As an example, with the following snippet:
x = add_c_converter(bool_converter)
Mypy would have inferred the type of x to be type[CConverter] with the current annotation. But with the new annotation, mypy should be able to infer that the type of x is bool_converter.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Neat!
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.