I am creating a class that has abstract methods and overriding in sub classes.
from abc import abstractmethod, ABC
class MethodInterceptor(object):
@abstractmethod
def before_execute(self):
pass
@abstractmethod
def after_execute(self):
pass
def __getattribute__(self, name):
attr = object.__getattribute__(self, name)
if hasattr(attr, '__call__'):
def new_func(*args, **kwargs):
self.before_execute()
result = attr(*args, **kwargs)
self.after_execute()
return result
return new_func
else:
return attr
Creating sub class:
class LoggerInterceptor(MethodInterceptor):
# overriding abstract method
def before_execute(self):
print("before")
def after_execute(self):
print("after")
Worker class:
class Worker(LoggerInterceptor):
def __init__(self):
self.name = "worker"
def work(self):
print(f"hi I am {self.name}")
c = Worker()
c.work()
But I am getting an error:
Traceback (most recent call last): File
“/Users/xxx/Projects/Pycharm/method_interceptor.py”, line 47, inc.work() File “/Users/xxx/Projects/Pycharm/method_interceptor.py”, line 18, in
new_func
self.before_execute() File “/Users/xxx/Projects/Pycharm/method_interceptor.py”, line 18, in
new_func
self.before_execute() File “/Users/xxx/Projects/Pycharm/method_interceptor.py”, line 18, in
new_func
self.before_execute() [Previous line repeated 996 more times] RecursionError: maximum recursion depth exceeded