得到__repr__返回字符串具有相同的值传递给eval?



我不完全明白这里发生了什么。为什么从repr返回的字符串值为False?如果有人能解释一下我不明白的地方,我将非常感激。

class Bag(object):
def __init__(self, iter_vals = []):
self.iter_vals = iter_vals

def __repr__(self):
return f"Bag({str(self.iter_vals)})"


if __name__ == '__main__':
b = Bag(['d','a','b','d','c','b','d'])
print(eval(repr(b)) == b)
>>> False

您还需要定义一个__eq__方法来定义如何一个Bag等于另一个Bag:

class Bag(object):
def __init__(self, iter_vals = []):
self.iter_vals = iter_vals

def __repr__(self):
return f"Bag({str(self.iter_vals)})"
def __eq__(self, other):
if not isinstance(other,Bag):
raise TypeError('not a Bag')
return self.iter_vals == other.iter_vals

if __name__ == '__main__':
b = Bag(['d','a','b','d','c','b','d'])
print(eval(repr(b)) == b)  # True