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='')

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM