본문 바로가기

python

python/파이썬/class/

# 이 블로그는 공부용 블로그로, 틀린 부분이 있을 수 있으며, 계속해서 수정합니다.

 

 

class는 데이터와 데이터를 처리하는 메소드(클래스 내부에서 만든 함수)를 가지고 있는 자료형이다. 

클래스 이름은 다른 변수와 헷갈리지 않게 하기 위해서 일반적으로 첫 문자를 대문자로 만들어 사용한다.  
생성자(초기자) 메소드를 만든다. => __init__()  
생성자(construnctor)란, 객체(클래스로 만든 변수)가 생성될 때 자동으로 실행되는 함수로 class 멤버 변수를 초기화 시키는 목적으로 사용된다. 
self 는 클래스 자기 자신을 의미하며 객체가 생성될 때 자기 자신이 전달된다.

메소드의 첫 번째 인수는 무조건 self 를 사용한다.
def __init__(self):
    멤버 변수 초기화
    변수 이름 앞에 'self.'이 붙은 변수를 멤버 변수라 부르고 멤버 변수는 클래스 전체에서 사용할 수 있다.
    변수 이름 앞에 'self.'이 붙지 않은 변수를 지역 변수라 부르고 지역 변수는 변수가 선언된 메소드 내부에서만 사용할 수 있다.
클래스에 저장된 데이터 출력에 사용하는 함수 => __str__() => java 에서 toString() 메소드와 같은 기능을 합니다.
def __str__(self):
    return 뒤의 출력할 내용은 반드시 문자열 형태로 코딩해야 한다.
    return 출력할 내용
    자바의 경우, toString 으로 메모리가 잘 들어갔는지 확인해야함.


클래스 안의 데이터를 출력할 때 str를 적지 않으면, 주소를 가져올 뿐 내용 확인이 불가능하다.
init => 생성자, str => 클래스 안 내용 출력 이 두 가지는 반드시 작성해야함.

예)

1
2
3
4
5
6
7
8
9
10
11
12
13
class Calculator: # 첫 문자를 대문자로
    def __init__(self, *num):  # * => 변수 앞에 '*' 을 붙여주면 가변 인자를 받는 튜플이 된다. 
        # print('Calculator 클래스의 객체가 생성될 때 자동으로 실행됩니다.')
        self.first = 0; self.second = 0; self.third = 0  # self 라는 말이 붙어있지 않아서 지역변수임. 지역변수는 자기가 선언된 함수 안에서만 사용될 수 있다.
        if len(num) == 1:
            self.first = num[0]
        elif len(num) == 2:
            self.first = num[0]; self.second = num[1]
        elif len(num) == 3:
            self.first = num[0]; self.second = num[1]; self.third = num[2]
    def __str__(self):
        # return '__str__() 메소드가 리턴하는 내용입니다.'
        return str(self.first + self.second + self.third)
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 첫 문자를 대문자로
class Score:
    # 생성자 함수로 Score 클래스의 객체가 생성될 때 이름과 3과목의 점수를 넘겨받아 멤버 변수를 초기화한다.
    def __init__(self, name, python, java, jsp):
        # 'self.' 이 앞에 붙은 변수를 멤버 변수라 부르고, 붙지 않은 변수는 지역 변수라 부른다.
        # 멤버 변수는 클래스 전체에서 사용된다. => 클래스 내부의 모든 함수에서 사용할 수 있다.
        # 지역 변수는 선언된 함수 내부에서만 사용 가능하다. => 다른 함수에서는 사용할 수 없다. 
        self.name = name # self. 을 붙여서 멤버 변수가 되어, 생성자 밖에서도 사용할 수 있다. ex) this.
        self.python = python
        self.java = java
        self.jsp = jsp
        self.total = python + java + jsp  # 입력한 기본 데이터를 가지고 계산한 데이터  
        self.mean = self.total / 3
        # __str # 줄 잘 맞춰서
    def __str__(self):
        return '이름 : {}, python : {}, java : {}, jsp : {}, total : {}, mean : {}'.format(self.name, self.python, self.java, self.jsp, self.total, self.mean)  # \ 는 같은 줄 취급, ; => 한 줄에 여러줄 코딩 가능
cs

 

1
2
3
4
5
score1 = Score('홍길동'10010099)  # def __init__ 으로 넘어가서 self. 에서 초기화 됨. 
print(score1)
score2 = Score('임꺽정'657445)  # def __init__ 으로 넘어가서 self. 에서 초기화 됨. 
print(score2)
 
cs

 

 

 

출력값 :

이름 : 홍길동, python : 100, java : 100, jsp : 99, total : 299, mean : 99.66666666666667

이름 : 임꺽정, python : 65, java : 74, jsp : 45, total : 184, mean : 61.333333333333336