from abc import abstractmethod class Step: """ Base abstract class for experiment's steps. It has three stages: pre, call and post. """ def pre(self): pass @abstractmethod def call(self, *args, **kwargs): pass def post(self): pass def init(self): pass def __call__(self, *args, **kwargs): self.pre() res = self.call(*args, **kwargs) self.post() return res