例如,我必须用一些基本的数学运算来制作计算器:
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.summ
和 self.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/