With type-hinting, defining a class in Python goes from
class SomeClass:
def __init__(self):
self.id = 5
to something like this
class SomeClass:
id: int
def __init__(self) -> None:
self.id = 5
However, a linter like ruff has an issue with the id: int line, which apparently would shadow the built-in id. That feels like a suprising behaviour to me, since in previous, type-hint-less times, id would have always been used as self.id with no shadowing whatsoever.
So I would like to know: is there really shadowing occurring and if so, to which extent, i.e. what is the scope of this shadowing?
The builtin
idwill be shadowed in the scope of the class definition block. Consider the following example: