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