javascript - 有什么惯用的方法可以在 Python 中向对象添加方法吗?

标签 javascript python idioms

例如,我必须用一些基本的数学运算来制作计算器:

class Power_calc():
    def calculate(self, exp):
        self.srt = exp.split(" ")
        self.x = float(self.srt[0])
        self.y = float(self.srt[2])
        operand = self.srt[1]
        if operand == '+':
            return self.summ(self.x, self.y)
        elif operand == "-":
            return self.minus(self.x, self.y)

    def summ(self, a, b):
        return a + b

    def minus(self, a, b):
        return a - b

calc1 = Power_calc()
print calc1.calculate("3.2 + 6.0")

有没有办法像在 Javascript 中那样将所有计算器方法分组到字典中(下面的示例):

function powerCalculator() {
var methods = { //adding all methods here
    '+': function(a, b) {
        return a + b;
    },
    '-': function(a, b) {
        return a - b;
    }
};
this.calculate = function(expression) {
    var arr = expression.split(' '),
    a = +arr[0],
    b = +arr[2],
    operand = arr[1]
    return methods[operand](a, b);
}

最佳答案

是的,你可以做到。 Python 函数是一级对象,因此您可以像在 JavaScript 中一样将它们存储在字典中。

如果你想定义内联函数,你可以使用 lambdas:

methods = {
    '+': lambda a, b: a + b,
    # ...
}

或者仅引用外部函数:

def plus(a, b): return a + b

methods = {
    '+': plus,
    # ...
}

请注意,方法只是包装函数(存储 self 引用);您可以在字典中使用 self.summself.minus 来存储绑定(bind)方法:

class Power_calc():
    def calculate(self, exp):
        methods = {
            '+': self.summ,
            '-': self.minus,
        }

        self.srt = exp.split(" ")
        self.x = float(self.srt[0])
        self.y = float(self.srt[2])
        operand = self.srt[1]
        return methods[operand](self.x, self.y)

    def summ(self, a, b):
        return a + b

    def minus(self, a, b):
        return a - b

更简单的是,您可以使用 operator module此处为预定义操作函数:

import operator

methods = {
    '+': operator.add
    # ...
}

关于javascript - 有什么惯用的方法可以在 Python 中向对象添加方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30297535/

相关文章:

javascript - Bootstrap 4 系绳放置

javascript - 查看他们的 div 时试图使菜单项变为粉红色

javascript - 如何将数组的值添加到对象

Python - 检查变量是否被赋予函数或使用默认值

python - 循环播放音乐,直到释放一个键。 Python

c - memset 重新分配内存为 0 是常见做法吗?

objective-c - 在 Objective-C 中初始化静态变量

javascript - ie10 background-position-x 的解决方法

python - 文件操作、查找单词和棘手的替换

dictionary - 是 "bad form"在一条语句中进行map lookup和type assertion吗?