class 만들 때 __eq__ 함수에서 만들고 있는 class(type)의 객체와의 비교는 어떻게 하나요

조회수 51회

예를 들어서


class num 

    def __init__(self,input_parm):
        self.num = int(input_parm)

    def __eq__(self, other):

이런 경우 (입력을 정수로 바꿔서 초기화 값으로 저장 ) 입력 parameter (input_parm)은 str, int ,num 타입을 받을 수 있다고 할때

num type을 입력 parameter으로 받을때는 int, str 타입을 받는 거와 마찬가지로 그냥 self.num = int(input_num)해도 되는 건가요?

그리고 __eq__부분에서도 num 타입이 other으로 들어왔을 때

self.num == other.num
return True

이렇게 해도 되는건가요??

같은 타입으로 입력 parameter이 들어왔을 때 어떻게 코딩을 짜야 하는지 모르겠습니다.

  • 목적이 뭔가요? 무엇을 하려는 것인지 알아야 도움되는 답변을 할 수 있습니다. 정영훈 2020.1.10 01:16

1 답변

  • 목적은 알 수 없으나 __eq__ 매직 메소드는 단순해서 아래 예제정도면 충분하지 않을까 합니다.

    class My:
        def __init__(self, v):
            self.v = v
    
        def __eq__(self, other):
            return (self.__class__ == other.__class__ ) and (self.v == other.v)
    
    class ScarceMy:
        def __init__(self, v):
            self.v = v
    
        def __eq__(self, other):
            return self.v == other.v
    
    
    s_my1 = ScarceMy(10)
    s_my2 = ScarceMy(20)
    
    my1 = My(10)
    
    print(s_my1 == s_my2) # 이것은 값이 다르므로 당연히 False
    print(s_my1 == my1)  # 같은 클래스의 객체가 아니므로 기대하는 것은 False 그러나 값만 비교하므로 True 가 됨
    print(my1 == s_my1) # 같은 클래스인지 확인을 하므로 기대한 대로 False 가 됨
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.