Python 中的常量

Muhammad Waiz Khan 2023年1月30日 2021年10月2日
  1. 通过定义类来定义 Python 常量
  2. 使用函数的 Python 常量
  3. 使用 namedtuple() 函数的 Python 常量
Python 中的常量

本教程将介绍在 Python 中创建常量或实现类常量属性的多种方法。我们不能在 Python 中声明一个常量,因为没有关键字 const。但是我们可以通过以下方式创建我们自己的常量。

通过定义类来定义 Python 常量

一种方法是创建一个类并将其属性声明为只读以用作常量。下面的示例代码演示了如何在 Python 中将 class 属性声明为只读。

class constant(object):
    __slots__ = ()
    val = 457

a = constant()

print(a.val)  
a.val = 23

输出:

457
AttributeError: 'constant' object attribute 'val' is read-only

在 Python 中创建常量的另一种方法是创建一个类并覆盖 __setattr__(self, *_) 以在有人尝试为类属性分配新值时返回异常。

我们可以通过以下方式在 Python 中使用类属性作为常量。

class Constant(object):
    CONST = "abcd"

def __setattr__(self, *_):
    raise Exception("Tried to change the value of a constant")

a = Constant()
print(a.CONST)
a.CONST_NAME = "a"

输出:

abcd
Exception: Tried to change the value of a constant

使用函数的 Python 常量

我们还可以创建一个函数,该函数始终返回我们想要分配给常量的相同值。下面的示例代码演示了如何使用该函数在 Python 中获取常量值。

def constant():
  return "xyz"

constant()

输出:

xyz

使用 namedtuple() 函数的 Python 常量

我们还可以使用 collections 模块的 namedtuple(typename, field_names) 函数在 Python 中创建一个常量。namedtuple() 函数返回名称为 typename 的新元组子类,而 field_names 是字符串标识符列表。就像在 Python 中一样,元组是不可变的,新元组子类的值不能更改,因此它可以用作常量。

下面的示例演示了如何使用 namedtuple() 函数在 Python 中创建常量。

from collections import namedtuple

my_consts = namedtuple('Constants', ['const1', 'const2'])
consts = my_consts(54, "abc")
print(consts.const1)
print(consts.const2)

输出:

54
abc

现在让我们尝试更改元组的值。

from collections import namedtuple

my_consts = namedtuple('Constants', ['const1', 'const2'])
consts = my_consts(54, "abc")
consts.const1 = 0

输出:

AttributeError: can't set attribute