혼공파 81강
1. 특수한 이름의 메서드
class Student:
# 클래스 내용
def __init__(self, 이름, 국어, 영어, 수학, 과학):
self.이름 = 이름
self.국어 = 국어
self.영어 = 영어
self.수학 = 수학
self.과학 = 과학
def sum(self):
return self.국어 + self.수학 + self.영어 + self.과학
def average(self):
return self.sum() / 4
def print(self):
print(self.이름, self.sum(), self.average(), sep="\t")
def __str__(self):
return f"{self.이름}\t{self.sum()}\t{self.average()}"
def __eq__(self, 다른대상): # self == 다른대상
print("__eq__() 함수 호출")
return self.sum() == 다른대상.sum()
def __ne__(self, 다른대상): # self != 다른대상
return self.sum() != 다른대상.sum()
def __gt__(self, 다른대상): # self > 다른대상
if type(다른대상) == Student:
return self.sum() > 다른대상.sum()
elif type(다른대상) == int:
return self.sum() > 다른대상
else:
raise "같은 자료형을 비교해주세요"
def __ge__(self, 다른대상): # self >= 다른대상
return self.sum() >= 다른대상.sum()
def __lt__(self, 다른대상): # self < 다른대상
return self.sum() < 다른대상.sum()
def __le__(self, 다른대상): # self <= 다른대상
return self.sum() <= 다른대상.sum()
# (1) 성적 비교 (비교 연산자를 사용하게 해달라)
a = Student("인성", 87, 88, 98, 95)
b = Student("구름", 92, 98, 97, 98)
print(a == a) # 두 학생의 성적 총합이 같을 경우 true
print(a == b) # 두 학생의 성적 중에서 a가 더 클 때 true
class StudentList:
def __init__(self) :
self.students = []
def add(self, student):
self.students.append(student)
def print(self):
print("이름", "총점", "평균", sep="\t")
for student in self.students:
student.print()
def __str__(self):
output = "이름\t총점\t평균\n"
for student in self.students:
output += f"{str(student)}\n"
return output.strip()
def __add__(self, 다른대상): # self + 다른대상
print("__add__() 함수 호출")
self.add(다른대상)
return self
students = StudentList()
# (2) + 연산자를 사용할 수 있게 해달라!
students += (Student("인성", 87, 88, 98, 95))
students += (Student("구름", 92, 98, 97, 98))
students.add(Student("별이", 76, 96, 95, 90))
# (3) print 함수를 일반적인 방법으로 사용할 수 있게 해달라
print(students)
print(Student("인성", 87, 88, 98, 95))
2. 값 객체
# 값 객체
class CmLength:
def __init__(self, cm):
if cm < 0:
raise "길이는 0이상으로 지정해야합니다."
self.__length = cm
def get(self):
return self.__length
def __add__(self, 다른대상):
if type(다른대상) != CmLength:
raise "길이 단위를 통일해주세요!"
return CmLength(self.get() + 다른대상.get())
CmLength(3) + CmLength(10)
'Base > Python' 카테고리의 다른 글
27. 상속(Inheritance)과 컴포지션(Composition) (0) | 2023.06.30 |
---|---|
26. 캡슐화 (0) | 2023.06.29 |
24. 클래스 문법 기본 (0) | 2023.04.20 |
23. 객체지향 프로그래밍 (0) | 2023.04.20 |
22. 예외 처리의 else finally 구문 / 예외 객체와 예외 구분 / 예외 강제 발생 (0) | 2023.03.25 |
댓글