我是一名Python新手,正在尝试通过检查和创建Python设计模式的示例来学习这种语言。
我对Singleton Pattern的经典实现感到困惑。大多数文章都提到以下实现方式作为经典:
class Singleton(object):
name = None
@staticmethod
def instance():
if '_instance' not in Singleton.__dict__:
Singleton._instance = Singleton()
return Singleton._instance
s1 = Singleton().instance();
s2 = Singleton().instance();
assert s1 is s2
但我对这个实现并不完全信服,因为我们没有限制用户创建单例类的多个对象,我仍然可以通过调用Singleton()来创建该类的一个实例。在Java中,我们通过将类的构造函数设置为私有来防止这种情况。
另一种实现方式是:
class Singleton(object):
_instances = {}
def __new__(class, *args, **kwargs):
if class not in class._instances:
instance = super().__new__(class)
class.__instances[class] = instance
return class._instances[class]
这让我感到非常困惑。有人能解释一下这是如何工作的吗?
__new__()
方法并始终返回相同的实例。 - kindall