__이름__() 형태의 메서드들은 특수한 상황에 자동으로 호출되도록 만들어졌다.
파이썬이 클래스를 사용할 때 제공해주는 보조 기능이다.
1. __str__
str() 함수의 매개변수로 객체를 넣으면 호출되는 메서드이다. 주로 객체를 문자열로 변환할 때 사용한다.
class Student:
def __init__(self, name, korean, math, english, science):
self.name = name
self.korean = korean
self.math = math
self.english = english
self.science = science
def get_sum(self):
return self.korean + self.math + self.english + self.science
def get_average(self):
return self.get_sum() / 4
def __str__(self):
return f"{self.name}\t{self.get_sum()}\t{self.get_average()}"
students = [Student("윤인성", 87, 98, 88, 95),
Student("연하진", 95, 98, 96, 98),
Student("구지연", 76, 96, 94, 90)]
print("이름", "총점", "평균", sep = "\t")
for student in students:
print(str(student))
# 결과값
# 이름 총점 평균
# 윤인성 368 92.0
# 연하진 387 96.75
# 구지연 356 89.0
2. 크기 비교 메서드
| 이름 | 영어 | 설명 |
| eq | equal | 같다 |
| ne | not equal | 다르다 |
| gt | greater than | 크다 |
| ge | greater than or equal | 크거나 같다 |
| lt | less then | 작다 |
| le | less then or equal | 작거나 같다 |
class Student:
def __init__(self, name, korean, math, english, science):
self.name = name
self.korean = korean
self.math = math
self.english = english
self.science = science
def get_sum(self):
return self.korean + self.math + self.english + self.science
def get_average(self):
return self.get_sum() / 4
def __str__(self):
return f"{self.name}\t{self.get_sum()}\t{self.get_average()}"
def __eq__(self, value):
return self.get_sum() == value.get_sum()
def __ne__(self, value):
return self.get_sum() != value.get_sum()
def __gt__(self, value):
return self.get_sum() > value.get_sum()
def __ge__(self, value):
return self.get_sum() >= value.get_sum()
def __lt__(self, value):
return self.get_sum() < value.get_sum()
def __le__(self, value):
return self.get_sum() <= value.get_sum()
# 비교할 학생 선언
student_a = Student("나선주", 98, 92, 96, 92)
student_b = Student("윤아린", 95, 98, 98, 98)
student_a == student_b
# False
student_a != student_b
# True
student_a > student_b
# False
student_a < student_b
# True
크기 비교 연산자를 사용할 수 있는 이유는 클래스에 메서드를 작성했기 때문에 사용이 가능하다.
하지만 위에서 __str__ 메서드만 작성한 Student 클래스에서 실행하면 오류가 발생하게 된다.

만약 크기 비교 연산자를 사용하여 비교할 때 자료형을 한정하고 싶다면 예외 발생을 활용할 수 있다.
아까 코드와 같은 코드지만 eq 쪽만 수정하기
class Student:
def __init__(self, name, korean, math, english, science):
self.name = name
self.korean = korean
self.math = math
self.english = english
self.science = science
def get_sum(self):
return self.korean + self.math + self.english + self.science
def get_average(self):
return self.get_sum() / 4
def __str__(self):
return f"{self.name}\t{self.get_sum()}\t{self.get_average()}"
def __eq__(self, value):
if not isinstance(value, Student):
raise TypeError("Student 클래스의 인스턴스만 비교할 수 있습니다.")
return self.get_sum() == value.get_sum()
def __ne__(self, value):
return self.get_sum() != value.get_sum()
def __gt__(self, value):
return self.get_sum() > value.get_sum()
def __ge__(self, value):
return self.get_sum() >= value.get_sum()
def __lt__(self, value):
return self.get_sum() < value.get_sum()
def __le__(self, value):
return self.get_sum() <= value.get_sum()
student_a = Student("나선주", 98, 92, 96, 92)
student_a == 10
# 결과값
# TypeError: Student 클래스의 인스턴스만 비교할 수 있습니다.'Python' 카테고리의 다른 글
| 파이썬 가비지 컬렉터 (1) | 2023.05.10 |
|---|---|
| 파이썬 클래스 변수와 클래스 메서드 (0) | 2023.05.10 |
| 파이썬 isinstance 함수 (0) | 2023.05.09 |
| 파이썬 소멸자 (0) | 2023.05.09 |
| 파이썬 모듈 생성 (0) | 2023.05.09 |