def get_eakon_instance_by_model(model_name) -> HVAC: """ A helper function to instantiate a new class using a model name. :param model_name: :return: """ model_name = model_name.lower() class_name = model_name.capitalize() try: module_type = import_module(name=f"eakon.{model_name}") model_class = getattr(module_type, class_name) return ABC.register(type(class_name, (model_class, ), {}))() except (ModuleNotFoundError, TypeError) as exc: logging.debug("Exception was {}".format(exc)) raise NotImplementedError( "No module {} implementing class {} was found. Model {} is unsupported." .format(model_name, class_name, model_name))
price = 0 if car.kilometers_since_break_change > 10000: # do work car.kilometers_since_break_change = 0 price = 1000 if self.next: return price + self.next.get_cost(car) return price # This is the sender that will send messages to the handler. class Garage: def __init__(self, maintenance): self.maintenance = maintenance def get_cost(self, car): return self.maintenance.get_cost(car) # Register classes ABC.register(ChangeOil) ABC.register(ChangeBreak) # Example of the chain starting. car = Car(6000, 15000) maintenance = ChangeOil() maintenance.set_next(ChangeBreak()) garage = Garage(maintenance) print(garage.get_cost(car))