Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免在Python3中重新声明常量_Python_Constants_Redeclaration - Fatal编程技术网

如何避免在Python3中重新声明常量

如何避免在Python3中重新声明常量,python,constants,redeclaration,Python,Constants,Redeclaration,我们有一个文件,其中有常量定义,并且有很多。当出现名称冲突时,python会为其分配一个新值,而不会警告具有该名称的常量已经存在。这是bug的潜在来源。我们使用的静态代码分析器没有找到它(Sonarqube和pylint)。如何确保没有名称冲突 PS:PyCharm提出了“上面定义的重新声明,没有使用”,但我不使用PyCharm。正如Olvin Roght所说,使用typing.Final from typing import Final MAX_SIZE: Final = 9000 MAX_S

我们有一个文件,其中有常量定义,并且有很多。当出现名称冲突时,python会为其分配一个新值,而不会警告具有该名称的常量已经存在。这是bug的潜在来源。我们使用的静态代码分析器没有找到它(Sonarqube和pylint)。如何确保没有名称冲突


PS:PyCharm提出了“上面定义的重新声明,没有使用”,但我不使用PyCharm。

正如Olvin Roght所说,使用typing.Final

from typing import Final
MAX_SIZE: Final = 9000
MAX_SIZE += 1 # Error reported by type checker
请注意,这将在类型检查器中返回一个错误,但代码仍将运行,并且值仍将更改

这需要Python3.8+


或者,您可以执行以下操作:

from dataclasses import dataclass
@dataclass(frozen=True)
class Consts:
  MAX_SIZE = 9000
myconsts = Consts()
myconsts.MAX_SIZE= 1 # generates an error

对于Python3.8+,您可以使用?实际上,如果将所有常量都设置为类或字典的成员,可能会更容易/更好。例如
myconstants.x
constdict[“x”]
第一种方法对我来说是正确的。我想要的是不能在同一个类中有两个同名的变量,但是冻结它也很有用。不幸的是,我们使用的是python 3.6.5。