如何对 Python 中的 int 对象执行 __eq__、__gt__ 等?
How to perform __eq__, __gt__ etc on int object in Python?
我正在开发一个 class,它需要多个规则来验证,例如如果某个模式出现大于、等于、小于某个数字。我有这个正则表达式的输出,我正在列表中验证并检查列表的长度。现在如何动态调用这些方法之一(__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
对象并没有真正实现这些方法。有什么办法可以实现吗?
与其在此处的 int
实例上使用 getattr
,不如考虑使用 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!')
我正在开发一个 class,它需要多个规则来验证,例如如果某个模式出现大于、等于、小于某个数字。我有这个正则表达式的输出,我正在列表中验证并检查列表的长度。现在如何动态调用这些方法之一(__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
对象并没有真正实现这些方法。有什么办法可以实现吗?
与其在此处的 int
实例上使用 getattr
,不如考虑使用 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!')