如何在Python中对int对象执行__eq __,__ gt__等?

时间:2015-01-30 19:27:55

标签: python reflection

我正在开发一个类,需要多个规则来验证,例如如果某些模式出现大于,等于,小于某个数字。我有这个正则表达式的输出我在列表中验证并检查列表的长度。现在我如何动态调用其中一种方法(__gt____eq__等?

我的方法:

func = getattr(len(re.findall('\d+', 'password1'), method_name) #method_name 
#can be any one of the values __eq__, __gt__).

if func(desired_length):
    print ":validated"
else:
    raise Exception("Not sufficient complexity")

例如,对于method_name='__eq__'desired_length=1,上述结果将为True。对于method_name='__gt__'desired_length=1,上述结果将为False(如果此字符串中出现的数字不止一次)。

但我意识到int对象并没有真正实现这些方法。有什么方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:2)

不是在getattr实例上使用int,也许您应该考虑operator模块。然后,您可以获取比较运算符并传递int实例和所需的长度。一个完整的例子是这样的:

import operator

method_name = '__eq__'
desired_length = 1

func = getattr(operator, method_name)
n_ints = len(re.findall('\d+', 'password1'))
if func(n_ints, desired_length):
   print('Yeah Buddy!')