首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果Python不能有私有方法,那么Singleton如何工作

如果Python不能有私有方法,那么Singleton如何工作
EN

Stack Overflow用户
提问于 2016-11-04 19:01:34
回答 2查看 62关注 0票数 0

我在这里查看了Python中的单例设计模式:http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html

代码语言:javascript
复制
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,如何防止有人多次实例化一个类呢?

EN

回答 2

Stack Overflow用户

发布于 2016-11-04 19:04:12

您发布的代码包含instance,它是一个类成员。因为__init__检查这个类成员,所以您可能有多个OnlyOne实例,但它们都共享同一个__OnlyOne实例。

票数 2
EN

Stack Overflow用户

发布于 2016-11-04 19:08:53

将会有几个不同的OnlyOne实例。

但是,在OnlyOne上,内部类__OnlyOne只有一个实例存储为类变量。

OnlyOne实例上的所有属性查找实际上都返回__OnlyOne实例的属性值(这就是__getattr__方法所做的事情)。

我从来没有见过这种模式的使用,通常人们通过创建一个模块全局变量来创建一个单例,然后到处使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40421012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档