如何将上下文管理器与列表一起使用

我有一个类,它具有初始化和清理逻辑:

class Bird(object):
    def __init__(self, name):
        self.name = name

    def __enter__(self):
        print("enter " + self.name)
        return self

    def __exit__(self, type, value, traceback):
        print("exit " + self.name)

我在上下文管理器中使用它:

with Bird("chicken") as b:
    print(b)

但是现在我想使用具有相同行为的对象列表,即在使用list之后,应该处理它的对象:

with DisposableList([Bird("A"), Bird("B")]) as list:
    #some ops

我如何实现列表或可能是另一种解决方案?

最佳答案 如果你不需要上课

from contextlib import contextmanager
@contextmanager
def bird(lst):
    print 'enter {}'.format(lst)
    yield lst
    print 'exit {}'.format(lst)


with bird([1,2,3,4]) as f:
    print f


enter [1, 2, 3, 4]
[1, 2, 3, 4]
exit [1, 2, 3, 4]
点赞