一个类多次实例化只获得一个实例,这是一种设计模式(单例)。
单例模式保证了在程序的不同位置都 可以且仅可以取到同一个对象实例 :如果实例不存在,会创建一个实例;
如果已存在就会返回这个实例。因为单例是一个类,所以你也可以为其提供相应的操作方法,以便于对这个实例进行管理。
简单的装饰器版本,仅供参考
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='')
