| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
|
I get complaints about isinstance checks now. Using type(sentinel) works, but feel insanely clumsy. Surely there must be a better way to do this. $ mypy Tools/clinic Tools/clinic/clinic.py:2697: error: Name "Unknown" is not defined [name-defined] Tools/clinic/clinic.py:3478: error: Name "Null" is not defined [name-defined] Tools/clinic/clinic.py:3632: error: Name "Null" is not defined [name-defined] Tools/clinic/clinic.py:3656: error: Name "Null" is not defined [name-defined] Found 4 errors in 1 file (checked 2 source files) |
Sorry, something went wrong.
|
Rather than doing if isinstance(x, Unknown) as the test, you can do if x is unknown. Since unknown is a sentinel value, the identity check is idiomatic. |
Sorry, something went wrong.
Doh. Thanks! |
Sorry, something went wrong.
|
The usage of NULL seems a little different from the other two, though, so maybe that one does need its own class. (Not sure about that -- I'm unfamiliar with this code!) E.g. I can't say I fully understand what's going on with the Null usage here: cpython/Tools/clinic/clinic.py Line 3483 in aed643b |
Sorry, something went wrong.
|
Yeah, the NULL usages need a different treatment. I'll have a look later today. |
Sorry, something went wrong.
| NULL: Final = Sentinels.NULL | ||
| unknown: Final = Sentinels.unknown | ||
|
|
||
| NullType = type(Sentinels.NULL) |
There was a problem hiding this comment.
Hmm, The type of Sentinels.Null is just Sentinels. For Python enums, all enum members are instances of the enum class. (This is why I was wondering if maybe the Null class should just be left as it is; it maybe needs to be its own class, rather than sharing the same class as the other sentinel values.)
Sorry, something went wrong.
There was a problem hiding this comment.
Oh, you're right.
Sorry, something went wrong.
There was a problem hiding this comment.
Perhaps we should amend this instead:
cpython/Tools/clinic/clinic.py
Lines 2605 to 2607 in dcdc90d
Sorry, something went wrong.
There was a problem hiding this comment.
I think my approach is fundamentally flawed. This is pretty simple really: we simply want distinct (sentinel) types for default_type and the instance check (🥁).
Sorry, something went wrong.
There was a problem hiding this comment.
I'm not sure if we're in agreement or not (possibly my brain's going fuzzy at the end of a long day 😆), but I think for this PR, I might keep the refactor for unspecified and unknown, but leave Null as it is on main.
Sorry, something went wrong.
There was a problem hiding this comment.
Fab, thanks!
Sorry, something went wrong.
There was a problem hiding this comment.
The annotation for default_type is probably also incorrect.
cpython/Tools/clinic/clinic.py
Lines 2598 to 2607 in dcdc90d
Sorry, something went wrong.
There was a problem hiding this comment.
The annotation for default_type is probably also incorrect.
It looks correct to me based on the comment and usage. But maybe I'm not seeing something. What makes you think it's incorrect?
Sorry, something went wrong.
There was a problem hiding this comment.
With a custom converter, you can override pretty much anything (AFAIK), so I think bltns.type[Any] is too narrow. I might be wrong.
Sorry, something went wrong.
There was a problem hiding this comment.
The comment indicates that default has to be an instance of default_type if default_type is not None, and isintance(x, Foo) for any given x will fail if Foo is not an instance of type or a tuple of objects which are instances of type
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Uh oh!
There was an error while loading. Please reload this page.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.