在一个旧的讨论中我找到了输入
Final
的参考。我尝试了文档中的示例:
y: Final[Sequence[str]] = ['a', 'b']
y.append('x') # Error: "Sequence[str]" has no attribute "append"
z: Final = ('a', 'b') # Also works
但与文档相反,它将 y
转变为
['a','b','x']
,没有错误。我使用的是Python 3.11。这是怎么回事?此外:2024 年用 Python 创建不可变常量的最新技术是什么?
我们来谈谈
Final
。来自文档:
正在谈论作业!不是突变。
typing.Final
类型限定符用于指示不应重新分配、重新定义或覆盖变量或属性
.append()
“变异”对象。您的
y
仍然指向同一个列表。所以它不会阻止你。这就是为什么您没有看到任何与此相关的错误。该错误表示
Sequence
类型不可变。为此,您应该使用
MutableSequence
。您可以使用
tuple
代替可变列表(它们也有其他差异)或创建您自己的类似列表的类:https://stackoverflow.com/a/22340603/13944524