【问题标题】:Python constants declarationPython 常量声明
【发布时间】:2011-09-18 12:42:06
【问题描述】:

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

【问题讨论】:

  • 你的意思是“创建一个新类”还是“实例化一个类的实例”?
  • 显然是的:codepad.org/hgv0iH92(我假设您的意思是新实例)这些东西很容易自己尝试。

标签: python constants


【解决方案1】:

是的,不要将它们放在一个类中,而是将它们直接放入您的模块中(将文件命名为 const.py,因此模块名称为 const)。为此使用一个类几乎是在滥用命名空间类 - 而 Python 有 packages/modules 用于此目的。

然后,如果您不想在所有内容前面写 const.,您甚至可以使用 from const import * 从该模块导入所有全局变量。但是请注意,通常不鼓励这样做,因为它可能会将很多东西导入全局命名空间 - 如果您只需要一两个常量 from const import ABC, DEF 等,也可以。

【讨论】:

  • 我想在其他类中使用,共享这个常量值。
【解决方案2】:

为什么你需要一个类?你可以使用这样的东西:

在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 

【讨论】:

    【解决方案3】:

    在上述解决方案中,唯一的缺点是您可能会意外修改 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 文件,但这是我所知道的唯一解决方案,它在真正的定义中体现了不变性。

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 2011-03-11
      • 1970-01-01
      • 2012-06-15
      • 2012-04-04
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多