Wie dekoriere ich die Methoden __enter__ und __exit__?Python

Python-Programme
Anonymous
 Wie dekoriere ich die Methoden __enter__ und __exit__?

Post by Anonymous »

Ich möchte den Decorator Deco verwenden, um die Methoden __enter __ und __exit __ Instanz neu zu formen. Der Code wird ausgeführt, aber der Wrapper wird in Abschnitt nicht ausgeführt. Ermitteln Sie die tatsächliche Ausgabe unten, gefolgt von der erwarteten Ausgabe und schließlich den Code.

Code: Select all

In __init__
-------------------
In __enter__
-------------------
In wrapper
Blah, blah, blah
-------------------
In __exit__
< /code>
Erwartete Ausgabe: < /p>
In __init__
-------------------
In wrapper
In __enter__
-------------------
In wrapper
Blah, blah, blah
-------------------
In wrapper
In __exit__
< /code>
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("------------------------")

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post