8. 클래스
1) 클래스 기본
(1) 객체
(2) 클래스
(3) 생성자
(4) 소멸자
(5) 메소드
2) 크기 비교 함수
1) 클래스 기본
(1) 객체
- 객체(object): 속성을 가질 수 있는 모든 것
- 객체 지향 프로그래밍: 객체 관련 코드를 효율적으로 작성하는 프로그래밍 (예, class)
- 'students'가 객체이고, 딕셔너리를 아래와 같은 함수 형태로 생성하면 오타 등의 실수를 줄일 수 있음
def input_student(name, korean, math, english):
return{
"name": name,
"korean": korean,
"math": math,
"english": english
}
def total(student):
return student["korean"] + student["math"] + student["english"]
def average(student):
return total(student) / 3
def output(student):
print(student["name"], total(student), average(student), sep="\t")
students = [
input_student("홍길동", 87, 68, 85),
input_student("심청이", 97, 64, 73),
input_student("김철수", 91, 75, 97),
input_student("김영희", 70, 88, 84),
]
print("name", "total", "average", sep="\t")
for student in students:
output(student)
더보기
# 실행결과
name total average
홍길동 240 80.0
심청이 234 78.0
김철수 263 87.66666666666667
김영희 242 80.66666666666667
(2) 클래스
- 클래스(class): 객체를 더 효율적으로 생성하기 위한 구문, 틀
- 인스턴스(instance): 클래스 기반으로 생성한 객체, 실체화 된 객체
(3) 생성자
- 클래스 이름과 같은 함수 (첫 문자는 대문자로 시작)
- class 클래스 이름
def __init__(self, 추가적인 매개변수...):
self.매개변수 = 매개변수
* self: 첫번째 매개변수, 자기자신을 나타내는 딕셔너리
(4) 소멸자
- 인스턴스가 소멸될 때 호출되는 함수 (생성자 반대)
- class 클래스 이름
def __del__(self, 추가적인 매개변수...):
(5) 메소드
- 클래스가 가진 함수
- class 클래스 이름
def 메소드 이름(self, 추가적인 매개변수...):
class Student:
def __init__(self, name, age): # → 생성자
print("객체가 생성되었습니다.")
self.name = name
self.age = age
def __del__(self): # → 소멸자
print("객체가 소멸되었습니다.")
def output(self): # → 메소드
print(self.name, self.age)
student = Student("홍길동", 20)
student.output()
더보기
# 실행결과
객체가 생성되었습니다.
홍길동 20
객체가 소멸되었습니다.
※ 클래스 선언을 통한 학생 성적 관리 프로그램 예시
class Student:
def __init__(self, name, korean, math, english):
self.name = name
self.korean = korean
self.math = math
self.english = english
def total(self):
return self.korean + self.math + self.english
def average(self):
return self.total() / 3
def output(self):
print(self.name, self.total(), self.average(), sep="\t")
students = [
Student("홍길동", 87, 68, 85),
Student("심청이", 97, 64, 73),
Student("김철수", 91, 75, 97),
Student("김영희", 70, 88, 84),
]
print("name", "total", "average", sep="\t")
for student in students:
student.output()
더보기
# 실행결과
name total average
홍길동 240 80.0
심청이 234 78.0
김철수 263 87.66666666666667
김영희 242 80.66666666666667
2) 크기 비교 함수
eq |
ne |
gt |
ge |
lt |
le |
equal |
not equal |
greater than |
greater than or equal |
less than |
less than or equal |
같다 |
다르다 |
크다 |
크거나 같다 |
작다 |
작거나 같다 |
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return(self.age == other.age) and \
(self.name == other.name)
def __ne__(self, other):
return(self.age != other.age)
def __qt__(self, other):
return(self.age > other.age)
def __ge__(self, other):
return(self.age >= other.age)
def __lt__(self, other):
return(self.age < other.age)
def __le__(self, other):
return(self.age <= other.age)
student = Student("홍길동", 20)
print(student == student)
print(student != student)
print(student > student)
print(student >= student)
print(student < student)
print(student <= student)
더보기
# 실행결과
True
False
False
True
False
True