2017-09-16 7 views
1

필자가 파이썬에서 가지고있는 프로젝트의 테스트 스크립트를 작성한 직후, 두 객체의 값이 같은지 확인하는 것은 foo == bar처럼 간단하지 않다는 것을 알게되었습니다. 예를 들어, 나는 속성으로 팬더 dataframe을 가진 개체 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

아니요, 객체 평등을 테스트하는 일반적인 방법은 없습니다.

이는 사용자 지정/임의의 개체가 평등성의 의미를 광범위하게 다양하게 해석하기 때문입니다. 예를 들어, 코드에서 "값은 부울 값 및 부울 값의 반복 값 및 모든 값이 동의 함"을 의미하도록 같음을 정의했지만이 규칙은 두 사전에 공통으로있는 키에만 적용됩니다. 누군가는 사전에 모든 키가 같지만 값을 신경 쓰지 않거나 모든 키와 모든 값이 동일하고 특정 데이터 유형 등을 검사해야 할 수도 있습니다. 따라서 사용자는이를 구현해야합니다.