流行的python设计模式_对象池设计模式的Python实现

我有一个类似的问题,我必须说排队。排队是相当好,但有一块失踪的拼图。以下类有助于确保获取的对象返回池。包括示例。

我已经允许两种方法使用这个类,用关键字或者用析构函数封装对象。首选with关键字,但如果由于某种原因不能/不想使用它(最常见的是需要来自多个队列的多个对象),则至少可以使用with关键字。如果您选择使用该方法,则会应用有关不调用析构函数的标准免责声明。

希望这能帮助那些和我和OP有同样问题的人。class qObj():

_q = None

o = None

def __init__(self, dQ, autoGet = False):

self._q = dQ

if autoGet == True:

self.o = self._q.get()

def __enter__(self):

if self.o == None:

self.o = self._q.get()

return self.o

else:

return self.o

def __exit__(self, type, value, traceback):

if self.o != None:

self._q.put(self.o)

self.o = None

def __del__(self):

if self.o != None:

self._q.put(self.o)

self.o = None

if __name__ == "__main__":

import Queue

def testObj(Q):

someObj = qObj(Q, True)

print 'Inside func: {0}'.format(someObj.o)

aQ = Queue.Queue()

aQ.put("yam")

with qObj(aQ) as obj:

print "Inside with: {0}".format(obj)

print 'Outside with: {0}'.format(aQ.get())

aQ.put("sam")

testObj(aQ)

print 'Outside func: {0}'.format(aQ.get())

'''

Expected Output:

Inside with: yam

Outside with: yam

Inside func: sam

Outside func: sam

'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值