在Python中创建单例-如何保存实例

问题描述 投票:0回答:1

[在学习如何在Python中创建单例时,我们大多数人首先遇到这种装饰器:

def singleton(class_):
    instances = {}
    def getinstance(*args, **kwargs):
        if class_ not in instances:
            instances[class_] = class_(*args, **kwargs)
        return instances[class_]
    return getinstance

@singleton
class MyClass(BaseClass):
    pass

虽然此装饰器的工作方式非常直观,但令我感到奇怪的是,当我们在“ MyClass”中创建第二个对象时,该装饰器会检查是否已经创建了一个对象。

在“单例”的定义中,Python检查“实例”字典。但是,它是一个局部变量:函数运行后,它不应该被销毁吗?因此,if class_ not in instances条件不应该始终为True吗?

因为我知道这种语法有效,所以我一直按原样使用它,但是这让我感到我仍然还没有完全理解局部变量。

python syntax singleton decorator local-variables
1个回答
0
投票
getinstanceinstances上,

class_closure

© www.soinside.com 2019 - 2024. All rights reserved.