it is my simple decorator there is some main() with cls = CLS()
def main():
....
cls = CLS()
result = func1(cls, some_data)
>>> new cls Instead of old cls
@decorator
def func1(*, **)
i want to replace old cls to new cls if was exeption in decorator i can use global variable i can use return cls is any more ways to replace ? with out global vars or return
def decorator(func):
@wraps(func)
def wrapper(cls, *args, **kwargs):
connection = cls.connection
data = func(*args, **kwargs)
While True:
try:
result = connection(data)
except:
cls = CLS()
connection = cls1.connection
return result
return wraper
CodePudding user response:
Without a return value or a global variable, your only option is to use a wrapper object so that you can change the reference in the decorator. The question is, if you really need to update the CLS
or just the connection
.
So you could do this instead:
cls.connection = new CLS().connection
The idea remains the same, it just a question whether you need an additional wrapper. The cls
in main
will have the updated connection
.
CodePudding user response:
class CLS:
_instance = None
.....
def __new__(cls, *args, **kwargs):
cls._instance = super().__new__(cls)
return cls._instance
and
connection = cls._instance.connection
its work