我正在开发一个类,需要多个规则来验证,例如如果某些模式出现大于,等于,小于某个数字。我有这个正则表达式的输出我在列表中验证并检查列表的长度。现在我如何动态调用其中一种方法(__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
对象并没有真正实现这些方法。有什么方法可以实现这个目标吗?
答案 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!')