본문 바로가기
Python Object-oriented Programming

__eq__ Method

by 자동매매 2023. 4. 3.

 

Introduction to the Python __eq__ method

 

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

 

그리고 Person 클래스의 인스턴스를 만듭니다.

 

john = Person('John', 'Doe', 25)
jane = Person('Jane', 'Doe', 25)

 

예제에서 john 객체   jane 객체 동일한 객체가 아닙니다. 그리고 is 연산자를 사용하여 확인할 있습니다.

 

print(john is jane)  # False

 

또한  등호 연산자(==) 사용하여 john jane 비교하면 False 결과를 얻을 있습니다.

 

print(john == jane) # False

 

제인은 나이가 같기 때문에 equal이기 원합니다. , 다음 식이 True 반환하려고 합니다.

 

john == jane

 

이렇게 하려면 Person 클래스에서 __eq__ dunder method  구현할  있습니다.

 

Python  == 연산자를 사용하여 클래스의 인스턴스를 비교할 클래스의 __eq__ 메서드를 자동으로 호출합니다. 기본적으로 Python __eq__ 메서드에 대한 특정 구현을 제공하지 않는 경우 is 연산자 사용합니다.

 

다음은   Person 개체의 age 같은 경우 True  반환하는 Person 클래스에서 __eq__ 메서드를 구현하는 how 보여 줍니다.

 

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def __eq__(self, other):
        return self.age == other.age

 

john = Person('John', 'Doe', 25)
jane = Person('Jane', 'Doe', 25)
print(john == jane)  # True

 

 

john = Person('John', 'Doe', 25)
mary = Person('Mary', 'Doe', 27)
print(john == mary)  # False

 

다음은 Person 객체를 정수와 비교합니다.  (에러 발생)

 

john = Person('John', 'Doe', 25)
print(john == 20) # AttributeError: 'int' object has no attribute 'age'

 

문제를 해결하려면 age 특성에 액세스하기 전에 개체가 Person 클래스의  인스턴스인지 확인하도록 __eq__ 메서드를  수정할 있습니다.

다른 개체가 Person 클래스의  인스턴스가 아닌 경우 __eq__ 메서드는 다음과 같이 False 반환합니다.

 

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def __eq__(self, other):
        if isinstance(other, Person):
            return self.age == other.age

        return False

 

이제 Person 클래스의 인스턴스를 정수 또는 다른 형식의 개체와 비교할 있습니다.

 

john = Person('John', 'Doe', 25)
print(john == 20)  # False

 

전체 Code

 

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def __eq__(self, other):
        if isinstance(other, Person):
            return self.age == other.age

        return False


john = Person('John', 'Doe', 25)
jane = Person('Jane', 'Doe', 25)
mary = Person('Mary', 'Doe', 27)

print(john == jane)  # True
print(john == mary)  # False


john = Person('John', 'Doe', 25)
print(john == 20)  # False

 

Summary

  •  __eq__ 메서드를 구현하여 등호 연산자(==) 사용하여 개체를 비교하기 위한 equality logic 정의합니다.
  • 기본적으로 Python __eq__ 메서드에 대한 특정 구현을 제공하지 않는 경우 is 연산자 사용합니다.
  • __eq__의 반환값은 bool type이다
 

'Python Object-oriented Programming' 카테고리의 다른 글

__bool__ Method  (0) 2023.04.03
__hash__ Method  (0) 2023.04.03
__repr__ Method  (0) 2023.04.03
__str__ Method  (0) 2023.04.03
Private Attributes  (0) 2023.04.03

댓글