Repository navigation
Expand file tree
/
Copy pathclassEx1.py
More file actions
48 lines (37 loc) · 2.06 KB
/
Copy pathclassEx1.py
File metadata and controls
48 lines (37 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 클래스 : 관련된 데이터(속성)와 기능(메서드)을 하나로 묶는 틀
# 객체(instance) : 그 틀로 찍어낸 실제 물건
class Student:
def __init__(self, name, kor, eng): # 생성자 — 객체를 만들 때 자동 호출
self.name = name # self.xxx = 이 객체가 계속 들고 있을 값
self.kor = kor
self.eng = eng
def total(self): # 메서드 — 첫 인자는 항상 self
return self.kor + self.eng
def average(self):
return self.total() / 2 # 다른 메서드도 self. 로 부른다
s1 = Student('홍길동', 85, 73) # 객체 생성 → __init__ 실행
s2 = Student('김길동', 90, 88)
print(s1.name, s1.total(), s1.average())
print(s2.name, s2.total(), s2.average())
# s1 과 s2 는 같은 틀에서 나왔지만 각자 자기 값을 들고 있다
print('---------- self 가 뭔가 ----------')
# 정의할 때는 def total(self) 라고 쓰지만
# 부를 때는 s1.total() 처럼 self 를 넘기지 않는다.
# 파이썬이 "점 앞의 객체"를 self 로 자동으로 넣어 준다.
print(Student.total(s1)) # 사실 이것과 같다 (이렇게 쓰지는 않습니다)
print('---------- self 를 안 붙이면 ----------')
class Bad:
def __init__(self, value):
value = value # self. 가 없다 → 그냥 지역 변수. 함수가 끝나면 사라진다
b = Bad(10)
# print(b.value) # AttributeError!
print('Bad 객체는 value 를 안 들고 있습니다')
print('---------- 속성 직접 접근 ----------')
s1.kor = 100 # 밖에서 바꿀 수 있다
print(s1.name, s1.total())
print('---------- 딕셔너리와 무엇이 다른가 ----------')
# step05 에서 학생을 딕셔너리로 표현했습니다
d = {'이름': '홍길동', '국어': 85, '영어': 73}
print(d['국어'])
# 딕셔너리는 데이터만 담습니다. 총점을 구하려면 매번 밖에서 계산해야 합니다.
# 클래스는 데이터와 "그 데이터로 하는 일"을 함께 담습니다.