pyhton 单例模式

优点: 对唯一实例的受控访问,节省资源;单例相当于全局变量,防止了命名空间被污染。

__new__实现:

class Singleton:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance


class MyClass(Singleton):
    pass


a = MyClass(10)
b = MyClass(20)

print(id(a), id(b))  # 140438916573112 140438916573112

装饰器实现:

def warpper(classObject):
    def inner(*args, **kwargs):
        if not hasattr(classObject, '_instance'):
            classObject._instance = classObject(*args, **kwargs)
        return classObject._instance
    return inner


@warpper
class MyClass3(object):
    pass


c = MyClass3()
d = MyClass3()

print(id(c), id(d)) #  140438916862976 140438916862976


版权声明:本文为qq_41998415原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。