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 |
댓글