【问题标题】:How do I reference static methods from a static property如何从静态属性中引用静态方法
【发布时间】:2022-01-03 11:22:25
【问题描述】:

我正在尝试从字典中调用函数 - operation_functions

  • key 是数学运算的名称
  • value 是 Calculator 类中执行数学运算的静态方法

当我尝试引用 operation_functions 中的函数时,它告诉我“计算器未定义”

我只想知道在同一个类中引用静态方法和静态属性的pythonic方式是什么

class Calculator:
    """ This is the Calculator class"""

    operation_functions = {
        "addition": Calculator.add_number,
        "subtraction": Calculator.subtract_number,
        "multiplication": Calculator.multiply_number,
        "division": Calculator.divide_number,
    }

    @staticmethod
    def calculate_numbers(operation, *vals):
        """ will call respective calculation functions based on operation """
        function = Calculator.operations[operation]
        return function(*vals)

    @staticmethod
    def add_number(*vals):
        """ performs addition and returns resulting value """
        History.add_addition_calculation(*vals)
        return Calculator.get_last_result()

【问题讨论】:

  • 在您创建课程时分配给operation_functions。在创建完成之前不会分配名称 Calculator
  • 这是 Python 中众所周知的问题。不幸的是,Python 让它变得很痛苦。

标签: python class oop static


【解决方案1】:

在创建类后分配operation_functions,以便您可以参考类名。

class Calculator:
    """ This is the Calculator class"""

    @staticmethod
    def calculate_numbers(operation, *vals):
        """ will call respective calculation functions based on operation """
        function = Calculator.operations[operation]
        return function(*vals)

    @staticmethod
    def add_number(*vals):
        """ performs addition and returns resulting value """
        History.add_addition_calculation(*vals)
        return Calculator.get_last_result()

Calculator.operation_functions = {
    "addition": Calculator.add_number,
    "subtraction": Calculator.subtract_number,
    "multiplication": Calculator.multiply_number,
    "division": Calculator.divide_number,
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多