ifadesiyle birlikte kullanıyor. Diğer içerik yöneticilerini kullanan bir içerik yöneticisi yazmaya çalışıyorum, böylece istemcilerin tüm tarifleri bilmemeleri yeterli. @contextmanager
kullanarak yapılamıyorum - yield
numaralı çağrıdan sonra gelen kod, bir istisna ile kesintiye uğradığınızda çalıştırılamıyor, bu yüzden sınıf tabanlı bir yönetici kullanmam gerekiyor. Bir sınıf anlatmak için herhangi bir yolu var mıPython'da bir içerik yöneticisi yazarak, kendisi bir
before
{}
enter one
enter two
enter complex three
{'one': 1, 'three': 3, 'two': 2}
exit complex three
exit two
exit one
after
{}
: Ben çıkış Buna istiyorum
before
{}
enter one
enter two
enter complex three
exit two
exit one
{'three': 3}
exit complex three
after
{}
:
from contextlib import contextmanager
import pprint
d = {}
@contextmanager
def simple(arg, val):
print "enter", arg
d[arg] = val
yield
print "exit", arg
del d[arg]
class compl(object):
def __init__(self, arg, val):
self.arg=arg
self.val=val
def __enter__(self):
with simple("one",1):
with simple("two",2):
print "enter complex", self.arg
d[self.arg] = self.val
def __exit__(self,*args):
print "exit complex", self.arg
del d[self.arg]
print "before"
print d
print ""
with compl("three",3):
print d
print ""
print "after"
print d
print ""
bu çıkışı: Burada
biraz betik örneği tabanlı içerik yöneticisi kendini diğer içerik yöneticileri ile sarmak için mi?
Python sürümünü belirlemek yararlı olurdu. –
Özür dilerim, ama neden bunu yapmak istersiniz? Sınıf-temelli içerik yöneticisinin, bağımlılıklarını temizledikten sonra son çıkması sadece bana doğal geliyor. –
Hedefleme python 2.7, üzgünüm –