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

如何在Python中的命名空间下创建类似C的常量结构对象,python,object,static,constants,Python,Object,Static,Constants,我想创建一个类的常量对象,可以在其他类和函数中反复使用 # 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) 如果我现在想使用

我想创建一个类的常量对象,可以在其他类和函数中反复使用

# 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++中的一些东西,在其中创建一个全局或给定的命名空间中的常量对象,这些对象可以被重用为一个具有完全限定名的常量对象,比如DATAYMAMSTATE::DATA1或DATAYMAMSTATE::DATA2等等< /P>


然而,我不确定我在上面所做的是用Python实现同样目标的Python方法。这是否正确?

在类的上层声明的变量是,并且只在声明它们的站点创建一次,然后它们仍然是常量。您可以亲自看到这一点:

def calc_值():
打印(“计算值”)
返回1
Foo类:
my_var=计算值()
打印(Foo.my\u var+Foo.my\u var)
#打印“计算值”,然后打印2

“如果我现在想使用DATA_CONSTANTS.DATA1,它是在第一次调用时创建的还是每次我引用此对象时创建的?”该对象(一个类)作为类定义语句的结果创建一次。从来没有创建过其他对象,为什么会呢?Python实际上没有用户定义的常量,顺便说一句,只有约定我对模块范围的常量使用了枚举。你还使用了<代码> DATAYRONTRONUT=类型.SimpleNameSpace(DATA1=数据(0,0),DATA2=数据(3,5),DATA3 =数据(43, 23))< /Cord> C++中的OPS背景,我认为我们需要对所声明的单词精确。在Python中从不声明变量/属性。当它们被分配到时,它们就开始存在。类定义语句是可执行代码,本质上是对
type
构造函数的调用,例如
Foo=type('Foo',(object,),{'my_var':calc_value()})
。在这方面,OP需要放弃许多来自一种非常名义上类型化、相对低级和静态编译语言的思想。因此,同样过于迂腐,“只在程序启动时创建一次”是误导性的,类是在运行class Definition语句时创建的,或者直接使用各种方法创建的(就像上面对
类型
构造函数的手动调用一样)。您可以将类定义放入循环、函数等中