본문 바로가기
Base/Python

25. 특수한 이름의 함수, 값 객체

by 귀멸 2023. 6. 29.

혼공파 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)

 

댓글