Python 从字符串应用比较运算符
我有一个类Foo,它包含一个数学比较操作op作为字符串:或'='。Foo还包含一个数字val Foo类: 定义初始化自身,操作:str,值:int: self.op=操作 self.val=值 在我的代码中,我从输入中读取一个数字,并使用Foo的包含操作将其与Foo的类示例值进行比较: f=Foo'这将与eval一起工作。但必须谨慎使用eval!请参阅本文,了解更安全的方法,首先使用ast.literal\u eval进行解析。 更安全的方法可能不再算作更简单或更优雅 Foo类: 定义初始化自身,操作:str,值:int: self.op=操作 self.val=值Python 从字符串应用比较运算符,python,comparison,Python,Comparison,我有一个类Foo,它包含一个数学比较操作op作为字符串:或'='。Foo还包含一个数字val Foo类: 定义初始化自身,操作:str,值:int: self.op=操作 self.val=值 在我的代码中,我从输入中读取一个数字,并使用Foo的包含操作将其与Foo的类示例值进行比较: f=Foo'这将与eval一起工作。但必须谨慎使用eval!请参阅本文,了解更安全的方法,首先使用ast.literal\u eval进行解析。 更安全的方法可能不再算作更简单或更优雅 Foo类: 定义初始化自
f=Foo'这更优雅,效果也很好:
class Foo:
def __init__(self, op: str, val: int):
self.op = op
self.val = val
def check(self, other):
if isinstance(other, (int, float)):
if self.op == '<': return self.val > other
if self.op == '>': return self.val < other
if self.op == '=': return self.val == other
if self.op == '!=': return self.val != other
if self.op == '>=': return self.val <= other
if self.op == '<=': return self.val >= other
return NotImplemented
这个条件是正确的,因为14小于15。另一种选择是:如果我在程序中使用Foo类,我想我会使用@S-c-r-a-t-c-h-y的方法。但这里有一个可能是优雅的方法,使用比较运算符的函数形式
Foo类:
定义初始化自身,操作:str,值:int:
self.op=操作
self.val=值
f=Foo:operator.gt,
“Python内置了这样的功能。我们可以超越它们 Foo类: 定义初始化自身,操作:str,值:int: self.op=操作 自我价值=价值 定义报告自我: 返回f{self.\uuuuu类{uuuuu名{self.value}{self.op}input\ux 定义自身,输入值: 返回self.value<输入值 定义自身,输入值: 返回self.value输入值 def _ge__self,输入值: 返回self.value>=输入值 def checkself,输入值:int: 操作={'=':self.\uuu ge\uuu} 返回操作.getself.op输入值 演示 f=Foo>=,15 printf Foo15>=输入 f、 支票14 符合事实的 f、 支票16 错误的 f>16 错误的 f>14 符合事实的
谢谢你的回答,但我也认为存储操作不像字符串,而是lambda。对我来说,这似乎是一个不错的解决方案: 小于=λx,y:x
f = Foo('<', 15)
if f.check(14):
print('ok')