我想使用装饰器deco
来重塑__enter__
和__exit__
实例方法。代码可以运行,但包装器在本with
节中未执行。请在下面找到实际输出,然后是预期输出,最后是代码。
电流输出:
In __init__
-------------------
In __enter__
-------------------
In wrapper
Blah, blah, blah
-------------------
In __exit__
预期输出:
In __init__
-------------------
In wrapper
In __enter__
-------------------
In wrapper
Blah, blah, blah
-------------------
In wrapper
In __exit__
class contMgr():
def __init__(self):
print("In __init__")
pass
def __enter__(self):
print("In __enter__")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("In __exit__")
pass
def __call__(self, *args, **kwargs):
print("In __call_")
def brol():
print("brol")
def deco(func):
def wrapper(*args,**kwargs):
print("In wrapper")
result = func(*args, **kwargs)
return result
return wrapper
@deco
def test():
print("Blah, blah, blah")
mgr = contMgr()
mgr.__enter__ = deco(mgr.__enter__)
mgr.__exit__ = deco(mgr.__exit__)
print("------------------------")
with mgr:
print("------------------------")
test()
print("------------------------")