可以创建一个常量吗?
先说结论, 事实上, 在 Python 当中, 是无法创建一个常量的.
原因是在 Python 中, 无法对赋值运算符进行重载, 因此, 实现不了真正意义上的常量. 当然, 可以使用一些 OOP 的方式变相实现常量.
class _CONST:
PI = 3.14
E = 2.718
def __setattr__(self, _, __):
raise ValueError('cannot rebind constant')
CONST = _CONST()
print(f'CONST.PI = {CONST.PI}')
print(f'CONST.E = {CONST.E}')
CONST.PI = 3.15
$ python3 examples/appendix/define_a_constant.py
CONST.PI = 3.14
CONST.E = 2.718
Traceback (most recent call last):
File "examples/appendix/define_a_constant.py", line 13, in <module>
CONST.PI = 3.15
File "examples/appendix/define_a_constant.py", line 6, in __setattr__
raise ValueError('cannot rebind constant')
ValueError: cannot rebind constant
我们可以看出, 当给 CONST.PI
赋值时, 会抛出我们定义好的异常, 从而实现了某种意义上的常量.
如果你使用 mypy 对 Python 代码进行静态检查, 可以通过静态检测的方式, 来杜绝常量被赋值.
from typing import Final
PI: Final = 3.14
PI = 4
$ mypy examples/appendix/define_a_final.py
/bin/bash: mypy: command not found