【问题标题】:SIngleton class does not retain valueSIngleton 类不保值
【发布时间】:2014-01-15 09:24:59
【问题描述】:

首先我想说我对 Python 编程相当陌生,因此我解决问题的方法可能不正确,如果是这种情况,请告诉我

我正在尝试使用 Singleton 类在我的代码中存储配置参数并在需要时使用它。我遇到了一个问题,即最初创建时存储在 Singleton 中的数据在随后对 Object 的调用中没有保留。

也许我创建 Singleton 对象的方式不正确,但我遵循的是 SO 上的代码示例。

首先是我的单例类

class Config(object):

    __instance = None

    dbserver = ""

    def __new__(cls):
        if cls.__instance == None:
            __instance = object.__new__(cls)
            __instance.name = "Configuration Object"
        return __instance

这是我最初创建的单例实例

configurator = Config()
configurator.dbserver = dbserver

随后我执行以下操作,dbserver 属性返回空字符串。

configurator = Config()
print configurator.dbserver

感谢您的阅读。

【问题讨论】:

标签: python singleton


【解决方案1】:

您似乎没有将局部变量 __instance 分配给类变量 cls.__instance

但是,如果您只是为了存储变量而这样做,我根本不知道您为什么需要一个实例。只需将它们直接存储在类中——它本身就是 Python 中的一等对象——或者甚至使用更 Pythonic 的模块。

编辑

使用类本身不会导致代码每次都重新运行:类级别的代码仅在类被定义时执行,这发生在第一次导入时。

但是由于类必须存在于某个模块(文件)中,您可以轻松地将所有代码直接放入模块中,然后将其导入您需要的地方。同样,模块级别的代码仅在第一次导入时执行。

【讨论】:

  • 我正在从配置文件中读取配置并在运行时存储在类中,但我看到你的建议我可以使用它自己的类从配置文件中读取变量并使其可用.但是如果我不使用单例对象,每次使用它时都必须重新读取配置文件?您能否详细说明您建议的 Pythonic 方法
  • 所以你的说法不是创建配置文件,而是使用一个类作为它自己的配置文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2011-09-22
相关资源
最近更新 更多