我在这里查看Python中的Singleton设计模式:http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html
class OnlyOne:
class __OnlyOne:
def __init__(self, arg):
self.val = arg
def __str__(self):
return repr(self) + self.val
instance = None
def __init__(self, arg):
if not OnlyOne.instance:
OnlyOne.instance = OnlyOne.__OnlyOne(arg)
else:
OnlyOne.instance.val = arg
def __getattr__(self, name):
return getattr(self.instance, name)
我在想Java中的Singleton模式是使用私有构造函数实现的。
但是,上面的代码中没有私有构造函数,据我所知,Python中没有私有方法。
因此,如果你想实现Singleton,你怎么能阻止某人多次实例化一个类?
答案 0 :(得分:2)
您发布的代码有instance
,这是一个类成员。由于__init__
会检查此类成员,因此您可能有多个OnlyOne
个实例,但它们都共享相同的__OnlyOne
实例。
答案 1 :(得分:0)
OnlyOne
会有几个不同的实例。
但是,只有一个内部类__OnlyOne
的实例存储为OnlyOne上的类变量。
OnlyOne实例上的所有属性查找实际上都返回__OnlyOne
实例的属性值(这是__getattr__
方法的作用)。
我从未见过这种模式,通常人们通过创建一个单一实例的模块全局变量来制作单例,然后只是在任何地方使用它。