单例python,只需要一个obj的情况

2024-04-25 02:04:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在的处境是,我必须确保我只有一个目标。我正在考虑像下面这样实现singleton:

class One_Of_a_Kind:
    def __init__(self):
        self.do_some_setup()


class One_Creator:
    Only_One = None
    def __new__(cls, *args, **kwargs):
        if One_Creator.Only_One:
            return One_Creator.Only_One
        else:
            One_Creator.Only_One = One_of_a_Kind()
            return One_Creator.Only_One

因为我读了很多关于单例(优点和缺点)的书,所以在实现这段代码时我有点犹豫。我想知道在只需要(或必须)某个类的一个对象的情况下使用它是否可以和/或被认为是良好的做法。你知道吗

有没有更好的方法来实现同样的事情?你知道吗


Tags: ofselfonly目标returninitdefsome
2条回答

何时以及如何使用单例是一个相当广泛的问题,主要基于观点。也就是说,我会这样实施:

class Singleton(object):
    state = {}
    def __init__(self):
        self.__dict__ = Singleton.state

这个想法取自here。这是一种伪单例,因为两个实例不会共享相同的id:

>>> s1 = Singleton()
>>> s2 = Singleton()
>>> s1 is s2
False
>>> s1.x = 42
>>> s2.x
42

一个更好的方法是博格设计模式。用python实现非常简单:

class Borg:

    _shared_state = {}

    def __init__(self):
        self.__dict__ = self._shared_state

实际上,您没有一个实例,但是每个实例共享相同的状态-这是最重要的部分。你知道吗

相关问题 更多 >