使用类型提示,在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