如何在Python中创建常量?
如何在Python中声明常量?
在Java中,我们这样做:
public static final String CONST_NAME = "Name";
如何在Python中声明常量?
在Java中,我们这样做:
public static final String CONST_NAME = "Name";
不能在 Python 中将变量或值声明为常量。
为了向程序员指示变量是常量,通常以大写形式编写它:
CONST_NAME = "Name"
要在常量更改时引发异常,请参阅 Alex Martelli 的 Python 中的常量。请注意,这在实践中并不常用。
从Python 3.8开始,有一个类型。最终
的变量注释,它将告诉静态类型检查器(如 mypy)不应重新分配您的变量。这是最接近Java的.但是,它实际上并不能阻止重新分配:final
from typing import Final
a: Final[int] = 1
# Executes fine, but mypy will report an error if you run mypy on this:
a = 2
没有像其他语言那样的关键字,但是可以创建一个属性,该属性具有“getter函数”来读取数据,但没有“setter函数”来重写数据。这实质上是保护标识符不被更改。const
下面是使用类属性的替代实现:
请注意,对于想知道常量的读者来说,代码远非易事。请参阅下面的说明。
def constant(f):
def fset(self, value):
raise TypeError
def fget(self):
return f()
return property(fget, fset)
class _Const(object):
@constant
def FOO():
return 0xBAADFACE
@constant
def BAR():
return 0xDEADBEEF
CONST = _Const()
print(hex(CONST.FOO)) # -> '0xbaadfaceL'
CONST.FOO = 0
##Traceback (most recent call last):
## File "example1.py", line 22, in <module>
## CONST.FOO = 0
## File "example1.py", line 5, in fset
## raise TypeError
##TypeError
代码说明:
constant
constant
以其他一些更老式的方式:
(代码相当棘手,下面有更多解释)
class _Const(object):
def FOO():
def fset(self, value):
raise TypeError
def fget(self):
return 0xBAADFACE
return property(**locals())
FOO = FOO() # Define property.
CONST = _Const()
print(hex(CONST.FOO)) # -> '0xbaadfaceL'
CONST.FOO = 0
##Traceback (most recent call last):
## File "example2.py", line 16, in <module>
## CONST.FOO = 0
## File "example2.py", line 6, in fset
## raise TypeError
##TypeError
property
property
fset
fget
property