Language/Python

Python 강의 정리 마지막. 클래스

Jen'_' 2021. 5. 3. 11:17
반응형

클래스

class 클래스 이름:
    클래스 내용

 

인스턴스 이름(변수 이름) = 클래스 이름()

※ 여기서 클래스 이름()은 생성자라고 한다

 

생성자(constructor)

class 클래스 이름:
    def __init__(self, 추가적인 매개변수):
        pass

 

객체에 초깃값을 설정해야 할 필요가 있을 때는 생성자를 구현하는 것이 안전한 방법이다.

생성자(Constructor)란 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다.

파이썬 메서드 이름으로 __init__를 사용하면 이 메서드는 생성자가 된다.

 

파이썬 메서드의 첫 번째 매개변수로 반드시 self를 입력해야 한다.

객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것이다.

 

 

메서드(method)

클래스 내부에 구현된 함수

class 클래스 이름:
    def 메서드 이름(self, 추가적인 매개변수):
        pass

 

 

예제1

- 학생들의 과목별 성적의 총합과 평균을 구하는 클래스 만들기

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
# 클래스 선언
class Student:
    def __init__(self, name, korean, math, english, sience):
        # 인스턴스 변수 초기화
        self.name = name
        self.korean = korean
        self.math = math
        self.english = english
        self.sience = sience
 
    def get_sum(self):
        return self.korean + self.math +\
            self.english + self.sience
 
    def get_average(self):
        return self.get_sum() / 4
 
    def to_string(self):
        return "{}\t{}\t{}".format(\
        self.name, self.get_sum(), self.get_average())    
 
        
# 학생 리스트를 선언
students = [
    Student("윤인성"99897859),
    Student("연하진"69717065),
    Student("구지연"99798081),
    Student("나선주"79837280),
    Student("윤아린"908698100),
    Student("윤인성"93807980)
]
 
# 학생을 한 명씩 반복
print("이름","총점","평균",sep="\t")
for i in students:
    print(i.to_string())
------
(result)
이름    총점    평균
윤인성  325     81.25
연하진  275     68.75
구지연  339     84.75
나선주  314     78.5 
윤아린  374     93.5 
윤인성  332     83.0 
cs

 

예제2

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
49
50
51
52
53
54
55
56
57
58
59
60
# 클래스 선언
class Student:
    # 클래스 변수
    cnt = 0
    students = []
 
    # 클래스 함수
    @classmethod
    def print(cls):
        print("-------- 학생 목록 -------")
        print("이름\t총점\t평균")
        for i in cls.students:
            # str(인스턴스) --> __str__이 실행됨
            print(str(i)) 
        print("--------------------------")    
 
    # 인스턴스 함수
    def __init__(self, name, korean, math, english, sience):
        # 인스턴스 변수 초기화
        self.name = name
        self.korean = korean
        self.math = math
        self.english = english
        self.sience = sience
        Student.cnt += 1
        Student.students.append(self)
 
    def get_sum(self):
        return self.korean + self.math +\
            self.english + self.sience
 
    def get_average(self):
        return self.get_sum() / 4
 
    def __str__(self):
        return "{}\t{}\t{}".format(self.name, self.get_sum(), self.get_average())
 
               
# 학생 리스트를 선언
Student("윤인성"99897859)
Student("연하진"69717065)
Student("구지연"99798081)
Student("나선주"79837280)
Student("윤아린"908698100)
Student("윤인성"93807980)
 
 
# 출력
Student.print()
---------
(result)
-------- 학생 목록 -------
이름    총점    평균
윤인성  325     81.25
연하진  275     68.75
구지연  339     84.75
나선주  314     78.5
윤아린  374     93.5
윤인성  332     83.0
--------------------------
cs

 

 

예제3. 상속

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
# 부모 클래스 선언
class Parent:
    def __init__(self):
        self.value = "테스트"
        print("Parent 클래스의 __init()__ 메서드가 호출되었습니다")
    def test(self):
        print("Parent 클래스의 test() 메서드 입니다"
 
 
# 자식 클래스 선언
class Child(Parent):
    def __init__(self):
        Parent.__init__(self)
        print("Child 클래스의 __init()__ 메서드가 호출되었습니다")
 
 
# 자식클래스의 인스턴스를 생성하고 부모의 메서드 호출
child = Child()
child.test()
print(child.value)
-----------
(result)
Parent 클래스의 __init()__ 메서드가 호출되었습니다
Child 클래스의 __init()__ 메서드가 호출되었습니다
Parent 클래스의 test() 메서드 입니다
테스트
cs

 

반응형