一個類多次實例化只獲得一個實例,這是一種設計模式(單例)。
單例模式保證了在程序的不同位置都 可以且僅可以取到同一個對象實例 :如果實例不存在,會創建一個實例;
如果已存在就會返回這個實例。因為單例是一個類,所以你也可以為其提供相應的操作方法,以便於對這個實例進行管理。
簡單的裝飾器版本,僅供參考
def singleton(cls):
_instance = {}
def inner(*args, **kwargs):
if cls not in _instance:
_instance[cls] = cls(*args, **kwargs)
return _instance[cls]
return inner
@singleton
class Cls(object):
def __init__(self):
pass
cls1 = Cls()
cls2 = Cls()
print(id(cls1) == id(cls2))
2
# 用兩個隊列實現一個棧。
# 后進先出:后放進去先拿出來。
class Stock:
def __init__(self):
self.queueA = []
self.queueB = []
def push(self, node):
self.queueA.append(node)
def pop(self):
if len(self.queueA) == 0:
return None
while len(self.queueA) != 1:
self.queueB.append(self.queueA.pop(0))
self.queueA, self.queueB = self.queueB, self.queueA # 交換是為了下一次的pop
return self.queueB.pop()
# 測試一下是否成功實現了棧
if __name__ == '__main__':
times = 5
testList = list(range(times))
testStock = Stock()
for i in range(times):
testStock.push(testList[i])
print(testList)
for i in range(times):
print(testStock.pop(), ',', end='')