Python常量声明

时间:2011-06-20 09:01:06

标签: python constants

如果我声明一个包含变量的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):

3 个答案:

答案 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文件,但这是我所知道的唯一解决方案,它在真正的定义中体现了不变性。