如果我声明一个包含变量的const类:
例如
class const:
MASTER_CLIENT_CONNECTED = 0
CLIENT_CONNECTED = 1
GET_SERVER_QUEUE = 9998
ERROR = 9999
有没有办法在不创建新类的情况下达到这个变量(常量)。
像这样:import const
const.MASTER_CLIENT_CONNECTED
或
import const
if(i==MASTER_CLIENT_CONNECTED):
答案 0 :(得分:11)
是的,而不是将它们放在一个类中,而不是将它们直接放入您的模块中(将文件命名为const.py
,因此模块名称为const
)。为此使用一个类几乎是滥用命名空间的类 - 为此目的,Python有packages/modules。
如果您不想在所有内容中编写from const import *
,那么您甚至可以使用const.
从此模块导入所有全局变量。但请注意,这通常是不鼓励的,因为它可能会将大量内容导入全局命名空间 - 如果您只需要一个或两个常量from const import ABC, DEF
等等,那就没问题了。
答案 1 :(得分:4)
为什么你需要上课?你可以使用这样的东西:
在constant.py中写道:
MASTER_CLIENT_CONNECTED = 0
CLIENT_CONNECTED = 1
GET_SERVER_QUEUE = 9998
ERROR = 9999
然后将其作为:
访问import constant
print constant.MASTER_CLIENT_CONNECTED
print constant.CLIENT_CONNECTED
print constant.GET_SERVER_QUEUE
print constant.GET_SERVER_QUEUE
答案 2 :(得分:0)
在上面的解决方案中唯一的缺点是你可能会意外地修改const.py文件中的变量 -
#const.py
var_a = 1
#app.py
import const
print(const.var)
const.var = 2
print(const.var)
#output
1
2
这可能是一个hacky解决方案,但为了防止修改任何常量变量,您可以将它们添加到只有getter方法的类中。
#const.py
class Constants:
@classmethod
get_vara(cls):
return 1
#app.py
from const import Constants
print(Constants.get_vara())
#output
1
我知道这个方法可能会占用const.py文件,但这是我所知道的唯一解决方案,它在真正的定义中体现了不变性。