为什么我们需要单例的构造函数?

问题描述 投票:0回答:1

为什么我们不能只创建静态方法和属性以在项目中全局使用?仅使用类属性而不使用任何对象属性也不会成为单例模式的一部分,这样使用它会有什么问题吗?它仅适用于单元测试等我们需要自定义构造函数的情况? 示例:

class GlobalInfo:
    _global_data = {}
    _lock = threading.Lock()

    @staticmethod
    def set_data(key, value):
        with GlobalInfo._lock:
            GlobalInfo._global_data[key] = value

    @staticmethod
    def get_data(key):
        with GlobalInfo._lock:
            return GlobalInfo._global_data.get(key)

我需要一种具有类似单例行为的东西,以便在多个线程需要访问相同信息的项目中使用。读了一下之后,我发现人们总是重写 new 方法等。我想知道我是否真的需要这样做,如果不需要,对于我的具体情况,我是否会违反单例模式?

python design-patterns singleton
1个回答
0
投票

不,大多数情况下没有必要,你是对的。

然而,在某些情况下,单例需要在运行时初始化 - 也许是为了在 Python 代码中提供某些配置参数的效果,或者创建一些其他进程范围的资源。

在这种情况下,这些食谱是有效 - 但不是需要

每当我需要这样的单例时(通常,我更喜欢将方法标记为静态,即使不需要初始化),我最喜欢的模式是简单地在模块级别创建单例类的实例 - 这样实例将是通过项目导入和使用的对象(而不是其类)。

就像:

class _MyConf:
    def __init__(self):
        # code that sets some attributes to be used process-wide
    def  method(self):
        # plain instance method
        ...

MyConf = _MyConf()

随后记录应使用

MyConf

© www.soinside.com 2019 - 2024. All rights reserved.