我刚写了一个python项目的测试脚本,我发现检查两个对象的值是否相等并不像foo == bar
那么简单。例如,我有一个对象dashboard
具有大熊猫数据帧作为一个属性,所以我定义其__eq__
方法为:是否有一种测试Python中两个对象的属性是否等价的通用方法?
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
的每个属性是否等同。
我在几个类中使用了这个__eq__
定义,并且在我的父类Test类中也使用了类似的比较方法。我让我的测试工作,但我很好奇,如果有一个更优雅/有效的方式来处理这个问题。 (免责声明:测试对我来说是新的,以及一般的OOP。)
你谈论测试:你应该使用像单元测试,或Pytest测试框架;这些有很多内置函数来完成这种事情。 – MrE