类型提示类成员是否遮蔽先前定义的或内置的变量?



使用类型提示,在Python中定义一个类从

class SomeClass:
def __init__(self):
self.id = 5

变成这样

class SomeClass:
id: int
def __init__(self) -> None:
self.id = 5

然而,像ruff这样的过滤器与id: int线有问题,这显然会遮蔽内置的id。这对我来说是一种令人惊讶的行为,因为在以前没有类型提示的时代,id总是被用作self.id,没有任何阴影。

所以我想知道:是否真的有阴影发生,如果有,到什么程度,即这种阴影的范围是什么?

内置的id将隐藏在类定义块的作用域中。考虑下面的例子:

class SomeClass:
id = lambda _: "overriden!"
print(id(42))  # prints 'overriden'
def __init__(self) -> None:
print(id(42))

SomeClass()  # prints an address
print(id(42))  # prints an address

最新更新