The execute method needs to have the 2 number parameters and needs to update the instance attributes.
Rather than having a chain of if statements you can use a dictionary instead
class Calculator: def __init__(self): self.number1 = 0 self.number2 = 0 self.result = 0 self.operator = "" def execute(self, func, number1, number2): self.number1 = number1 self.number2 = number2 if func == "add": self.add() def add(self): self.result = self.number1 + self.number2 self.operator = "+" def sub(self): self.result = self.number1 - self.number2 self.operator = "-" def mul(self): self.result = self.number1 * self.number2 self.operator = "*" def div(self): self.result = self.number1 / self.number2 self.operator = "/" def __str__(self): return f"Result: {self.number1} {self.operator} {self.number2} = {self.result}" calculator = Calculator() calculator.execute("add", 1, 2) print(calculator)
Rather than having a chain of if statements you can use a dictionary instead
class Calculator: def __init__(self): self.number1 = 0 self.number2 = 0 self.result = 0 self.operator = "" self.commands = { "add": self.add, "sub": self.sub, "mul": self.mul, "div": self.div, } def execute(self, func, number1, number2): self.number1 = number1 self.number2 = number2 command = self.commands[func] command() def add(self): self.result = self.number1 + self.number2 self.operator = "+" def sub(self): self.result = self.number1 - self.number2 self.operator = "-" def mul(self): self.result = self.number1 * self.number2 self.operator = "*" def div(self): self.result = self.number1 / self.number2 self.operator = "/" def __str__(self): return f"Result: {self.number1} {self.operator} {self.number2} = {self.result}" calculator = Calculator() calculator.execute("add", 1, 2) print(calculator)