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