如何在 Python 中的命名空间下创建类似结构对象的常量 C

How to create constant C like struct objects under a namespace in Python

我想创建一个 class 的常量对象,我可以在其他 class 和函数中一次又一次地使用它

# Simple C like struct
class data:
  def __init__(self,a,b)
    self.a = a
    self.b = b

# Constant objects in a namespace ??
class DATA_CONSTANTS:
  DATA1 = data(0,0)
  DATA2 = data(3,5)
  DATA3 = data(43, 23)

如果我现在想使用 DATA_CONSTANTS.DATA1,它会在第一次调用时创建还是每次我引用该对象时创建?

我正在寻找的是类似于 C++ 的东西,您可以在全局或给定的命名空间中创建常量对象,这些常量对象可以作为具有完全限定名称的常量对象重复使用,比如 DATA_CONSTANTS::DATA1 或 DATA_CONSTANTS::DATA2等等

但是我不确定我在上面所做的是在 Python 中完成相同任务的 pythonic 方式。这是正确的吗?

在 class 的上层声明的变量是 class variables,并且仅在声明它们的站点创建一次,然后它们保持常量。你可以自己看看这个:

def calc_value():
    print("computed the value")
    return 1

class Foo:
    my_var = calc_value()

print(Foo.my_var + Foo.my_var)
# prints "computed the value" then 2