2017-09-16 60 views
1

我剛寫了一個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()應用於整個屬性比較列表,以測試selfother的每個屬性是否等同。

我在幾個類中使用了這個__eq__定義,並且在我的父類Test類中也使用了類似的比較方法。我讓我的測試工作,但我很好奇,如果有一個更優雅/有效的方式來處理這個問題。 (免責聲明:測試對我來說是新的,以及一般的OOP。)

+0

你談論測試:你應該使用像單元測試,或Pytest測試框架;這些有很多內置函數來完成這種事情。 – MrE

回答

0

不,沒有測試對象相等的一般方法。

這部分是因爲自定義/任意對象對於平等的含義有着廣泛的不同解釋。例如,在你的代碼中,你定義的平等意味着「值是布爾值和/或布爾值的迭代和所有值都同意」,但是這個規則只適用於兩個字典都有共同的鍵。其他人可能需要檢查字典是否具有所有相同的鍵,但不關心這些值,或者所有鍵和所有值都是相同的以及特定數據類型等。因此,這由用戶來執行。

相關問題