gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:52:31 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com