Python Forum
How to pass a method as argument in an another method?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to pass a method as argument in an another method?
#3
The execute method needs to have the 2 number parameters and needs to update the instance attributes.
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)
Reply


Messages In This Thread
RE: How to pass a method as argument in an another method? - by Yoriz - Sep-30-2021, 06:38 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Method returning None husksedgier 2 166 May-04-2024, 06:38 PM
Last Post: husksedgier
  Int.From_Bytes Method - Conversion of Non-Escaped Bytes Objects new_coder_231013 2 449 Apr-06-2024, 04:24 PM
Last Post: new_coder_231013
  Why is the copy method name in python list copy and not `__copy__`? YouHoGeon 2 307 Apr-04-2024, 01:18 AM
Last Post: YouHoGeon
  class definition and problem with a method HerrAyas 2 297 Apr-01-2024, 03:34 PM
Last Post: HerrAyas
  super() and order of running method in class inheritance akbarza 7 826 Feb-04-2024, 09:35 AM
Last Post: Gribouillis
  problem usage of static method akbarza 5 582 Feb-03-2024, 07:43 AM
Last Post: paul18fr
  Building a DoublyLinkedList in Python - - append method Drone4four 2 455 Jan-08-2024, 01:27 PM
Last Post: Drone4four
  How to pass encrypted pass to pyodbc script tester_V 0 891 Jul-27-2023, 12:40 AM
Last Post: tester_V
Information Best distribution method inovermyhead100 0 580 Jul-19-2023, 07:39 AM
Last Post: inovermyhead100
  method call help sollarriiii 6 1,208 Feb-21-2023, 03:19 AM
Last Post: noisefloor

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020