2017-09-16 10 views
1

私はPythonで持っているプロジェクト用のテストスクリプトを書いたばかりですが、2つのオブジェクトの値が等しいかどうかの確認はfoo == barほど簡単ではありません。例えば、私は属性としてパンダのデータフレームを持つオブジェクトdashboardを持っているので、私はとその__eq__メソッドを定義した:それは、各オブジェクトの辞書を比較し、これらの比較のいずれか以外の何かを得ている場合2つのオブジェクトの属性が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__定義をいくつかのクラスで使用し、親テストクラスの比較メソッドにも同様のものを使用しました。私は働くためのテストを受けましたが、これを処理するよりエレガントで効率的な方法があれば私は興味があります。 (免責事項:テストは私にとって新しいもので、一般的にはOOPです。)

+0

あなたは、テストの話をしている:あなたはユニットテスト、またはPytestなどのテストフレームワークを使用する必要があります。これらは、このようなことをするための機能が組み込まれています。 – MrE

答えて

0

いいえ、オブジェクトの等価性をテストする一般的な方法はありません。

これは、カスタム/任意のオブジェクトが、等価性の意味の広範な解釈を持つためです。たとえば、コードでは、「値はブール値のブール値および/または反復可能値であり、すべての値が一致します」という意味に等値を定義しましたが、このルールは、両方の辞書に共通するキーにのみ適用されます。他の誰かが、辞書がすべて同じキーを持ち、値について気にしないか、すべてのキーとすべての値が同一であるか、特定のデータ型などであるかをチェックする必要があるかもしれません。データフレームを比較する

関連する問題