我在这里查看了Python中的单例设计模式: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中,单例模式是使用私有构造函数实现的。
但是,上面的代码中没有私有构造函数,据我所知,Python中也没有私有方法。
那么,如果你想实现Singleton,如何防止有人多次实例化一个类呢?
发布于 2016-11-04 19:04:12
您发布的代码包含instance,它是一个类成员。因为__init__检查这个类成员,所以您可能有多个OnlyOne实例,但它们都共享同一个__OnlyOne实例。
发布于 2016-11-04 19:08:53
将会有几个不同的OnlyOne实例。
但是,在OnlyOne上,内部类__OnlyOne只有一个实例存储为类变量。
OnlyOne实例上的所有属性查找实际上都返回__OnlyOne实例的属性值(这就是__getattr__方法所做的事情)。
我从来没有见过这种模式的使用,通常人们通过创建一个模块全局变量来创建一个单例,然后到处使用它。
https://stackoverflow.com/questions/40421012
复制相似问题