Python 单例

2018-10-27  本文已影响7人  一本大书

基本实现:通过创建一个类属性指向实例对象

class Dog:
    # 定义一个私有类属性 
    __instance = None
    def __new__(cls):
        if cls.__instance == None:
            cls.__instance = super().__new__(cls)
            return cls.__instance
        else:
            # 上一次创建的对象的引用
            return cls.__instance
a = Dog()
print(id(a))

b = Dog()
print(id(b))

打印结果:

4387682736
4387682736

拓展:初始化带参数的单例

class Dog:
    # 定义一个私有类属性 
    __instance = None
    __init_flag = False
    def __new__(cls, name):
        if cls.__instance == None:
            cls.__instance = super().__new__(cls)
            return cls.__instance
        else:
            # 上一次创建的对象的引用
            return cls.__instance

    def __init__(self, name):
        if Dog.__init_flag == False:
            self.name = name
            Dog.__init_flag = True
            pass
        pass


a = Dog("旺财")
print(id(a))
print(a.name)

b = Dog("小白")
print(id(b))
print(b.name) 

打印结果:

4466540616
旺财
4466540616
旺财
上一篇 下一篇

猜你喜欢

热点阅读