1. 程式人生 > >Python設計模式(單例模式)筆記

Python設計模式(單例模式)筆記

版本:Python3.6.1

# coding = utf - 8

"""
time:2018年4月3日 10:15:02
function:設計模式---單例模式
"""

"""
單例模式:
    保證物件的唯一性
    思路:
    在建立物件時,只分配一個記憶體空間,不管你建立多少個物件,記憶體只有一個,所有物件都指向它

"""
class singleClass():
    __single = None #用來控制記憶體分配唯一
    __firstInit = False #用來控制初始化唯一

    def __init__(self,name,age):
        # 只要第一個初始化物件的值
        if not singleClass.__firstInit:
            self.name = name
            self.age = age
            singleClass._firstInit = True

    def __new__(cls, *args, **kwargs):
        if not cls.__single:    #當建立第一次物件之後,if一直不成立,記憶體一直沒變
            cls.__single = super().__new__(cls)     #將記憶體統一
        return  cls.__single

a = singleClass("aaa",12)
b = singleClass("bbb",13)
c = singleClass("ccc",11)
print("a.name = %s ,a.age = %d"%(a.name,a.age))
print("b.name = %s ,b.age = %d"%(b.name,b.age))
print("a.id = %d"%id(a))
print("b.id = %d"%id(b))

print("---"*20)
a.age = 15
print("a.name = %s ,a.age = %d "%(a.name,a.age))
print("b.name = %s ,b.age = %d"%(b.name,b.age))
print("a.id = %d"%id(a))
print("b.id = %d"%id(b))
print(id(a.name))
print(id(a.age))