2024-04-20 15:56:32 发布
网友
如何使用assert语句验证两个值仅为忽略类型的变量?我希望下面的回复是真的
s = 3 t = '3' assert s == t
您可以将两者转换为同一类型并比较它们;即
assert str(s) == str(t)
一般来说,除非类型的__eq__方法为您处理类型转换,否则不同类型的值不会进行相等的比较。无论是str.__eq__还是int.__eq__都不会这样做,因此'3' == 3和3 == '3'都将计算为False。为了使断言有效,您必须转换一个或另一个参数,并且转换必须保持您心中的任何平等感。你知道吗
__eq__
str.__eq__
int.__eq__
'3' == 3
3 == '3'
assert str(s) == t assert s == int(t)
具有正确编写的__eq__方法的类型可以为您处理这个问题。想象一下这样一个名为IntorStr的类,那么以下所有内容都将通过:
IntorStr
for x,y in itertools.product([3, '3'], repeat=2): assert IntOrStr(x) == y assert x == IntOrStr(y) assert IntOrStr(x) == IntOrStr(y)
IntOrStr可能看起来像
IntOrStr
class IntOrStr: def __init__(self, v): self.v = v self.type = type(v) def __eq__(self, other): if self.v == other: return True try: v = self.type(other) else: if self.v == v: return True try: v = other.v else: return self.v == v or self.v == self.type(v) return False
您可以将两者转换为同一类型并比较它们;即
一般来说,除非类型的
__eq__
方法为您处理类型转换,否则不同类型的值不会进行相等的比较。无论是str.__eq__
还是int.__eq__
都不会这样做,因此'3' == 3
和3 == '3'
都将计算为False。为了使断言有效,您必须转换一个或另一个参数,并且转换必须保持您心中的任何平等感。你知道吗具有正确编写的
__eq__
方法的类型可以为您处理这个问题。想象一下这样一个名为IntorStr
的类,那么以下所有内容都将通过:IntOrStr
可能看起来像相关问题 更多 >
编程相关推荐