在Python中,是否有一种通用的方法来测试两个对象的属性是否相等?

在Python中,是否有一种通用的方法来测试两个对象的属性是否相等?,python,python-2.7,testing,comparison,Python,Python 2.7,Testing,Comparison,我刚刚用python为一个项目编写了一个测试脚本,我了解到检查两个对象的值是否相等并不像foo==bar那么简单。例如,我有一个对象dashboard,它的属性是pandas数据帧,因此我将其\uuuuuu eq\uuu方法定义为: def __eq__(self, other): vals = [self.__dict__[k] == other.__dict__[k] for k in self.__dict__.keys()] vals = [v if isinstance

我刚刚用python为一个项目编写了一个测试脚本,我了解到检查两个对象的值是否相等并不像
foo==bar
那么简单。例如,我有一个对象
dashboard
,它的属性是pandas数据帧,因此我将其
\uuuuuu eq\uuu
方法定义为:

def __eq__(self, other):
    vals = [self.__dict__[k] == other.__dict__[k] for k in self.__dict__.keys()]
    vals = [v if isinstance(v, bool) else all(v) for v in vals]
    return all(vals)
它比较每个对象的字典,如果其中任何一个比较结果不是布尔值(例如,数据帧),则应用
all()
将其简化为单个布尔值。然后,我将
all()
应用于整个属性比较列表,以测试
self
other
的每个属性是否等效


我在几个类中使用了这个
\uuuuuuuueq\uuuuuu
定义,并且在我的父测试类中使用了类似的比较方法。我的测试开始了,但我很好奇是否有更优雅/有效的方法来处理这个问题。(免责声明:测试对我来说是新的,对OOP来说也是新的。)

不,没有一种测试对象相等性的通用方法


这部分是因为自定义/任意对象对平等的含义有着广泛不同的解释。例如,在您的代码中,您定义了相等,意思是“值是布尔值和/或布尔值的可比数,且所有值都一致”,但此规则仅适用于两个字典具有共同点的键。其他人可能需要检查字典是否具有所有相同的键但不关心值,或者所有键和值是否相同以及是否具有特定的数据类型等。因此,这由用户来实现。

不,没有测试对象相等性的通用方法


这部分是因为自定义/任意对象对平等的含义有着广泛不同的解释。例如,在您的代码中,您定义了相等,意思是“值是布尔值和/或布尔值的可比数,且所有值都一致”,但此规则仅适用于两个字典具有共同点的键。其他人可能需要检查字典是否具有所有相同的键,但不关心值,或者所有键和值是否相同以及是否具有特定的数据类型等。因此,这由用户来实现。

要比较数据帧,因为您提到了这一点,有:

DataFrame.equals(other)

要比较数据帧,由于您提到了这一点,有:

DataFrame.equals(other)

您正在谈论测试:您应该使用Unittest或Pytest之类的测试框架;它们有很多内置函数来做这类事情;它们有很多内置函数来完成这类事情。