网上流传最广的 Python 单例模式竟然是有问题的?

2022-06-23 17:35:46 +08:00
 wuwukai007
class AppConfig:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls,'_instance'):
            cls._instance=super(AppConfig,cls).__new__(cls)
        return cls._instance

app = AppConfig()
app.name = '单例模式'
del app
app2 = AppConfig()
print("app2 name=",app2.name)
4987 次点击
所在节点    Python
26 条回复
dicc
2022-06-24 16:13:33 +08:00
你主动删除的,不关单例的事吧..
catsoul
2022-06-24 16:54:56 +08:00
单例模式正常来说是不让你销毁这个唯一实例的...
Macv1994
2022-06-25 14:03:17 +08:00
单例模式不就是为了只有一个实例么?
qbqbqbqb
2022-07-04 15:46:59 +08:00
del 不是删除对象,是删除变量。可以近似理解成,语义上相当于一个更强的"=null"(和 Java ,C#等语言相比).
就和你在 Java 里写如下代码一样:
AppConfig app = AppConfig.getInstance();
app = null;
这样做显然不会销毁单例。和 Python 里的这种情况是一回事。
yagamil
2022-07-09 17:33:00 +08:00
其实楼主给出的解决方案也挺好的呀。
Kobayashi
2022-07-09 20:07:31 +08:00
你咋不说它实现的不是线程安全的,多线程情况下可能同时创建多个实例呢?:P

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861715

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX