코딩뚠뚠

파이썬 self와 __init__ 에 대해 본문

공부/기타

파이썬 self와 __init__ 에 대해

로디네로 2021. 4. 5. 20:03
반응형

 

 

파이썬을 쓰면서 self 와 __init__ 을 종종 볼 수 있었다

(물론 C++에서도 self 와 this 같은것을 볼 수 있다.)

 

self는 항상 메서드의 첫번째 인자여야된다 라고만 알고있었고 __init__은 초기화? 로 알고있었다.

 

이번 포스팅을 기점으로 확실히 배운 개념을 정리해보고자 한다.

 


 

self

 

self는 python의 클래스에서 쓰인다.

 

클래스에서 self의 의미는 '자기자신' 을 의미한다.

(뒤에서 더 알아보자)


 

그렇다면 클래스란 뭘까?

 

예를 들어 설명해보겠다.

 

만약 덧셈을 수행하는 함수가 있다고 생각해보자.

a = 0
b = 0

def sum_1(num):
    global a
    a += num

def sum_2(num):
    global b
    b += num
    
sum_1(1)
sum_2(1)
sum_1(3)
sum_2(4)

위와 같은 경우 a 의 정답은 4 b의 정답은 5가 될 것이다.

 

같은 연산을 수행하는 함수가 두개인 경우였지만 이와 같은 경우가 100가지가 있다면?

 

이럴 때 클래스를 사용하는 것이다.

 

class sum_res:
    def __init__(self):
        self.result = 0
        
    def adder(self, num):
        self.result += num
        return self.result
        
sum_1 = sum_res()
sum_2 = sum_res()
sum_3 = sum_res()

이와 같이 sum_res라는 class를 만들 수 있었다.

 

adder 함수에서는 입력받은 num 값을 result에 더해서 반환한다.

 

class를 이용해 같은 작업(덧셈)을 하는 공장을 차린셈이다.

 


 

그럼 다시 본론으로 돌아와 self와 __init__ 은 뭘까

 

위의 예제에서 sum_1의 result를 알고자 하면 sum_1.result 로 표현할 수 있을 것이다.

 

앞에서 self는 '자기자신' 이라고 했다

 

그리고 우리는 sum_1 = sum_res()로 선언해주었기 때문에 sum_1(2) 와 같이 사용할 수 있다.

 

그렇다면 adder(self,num) 에서 self 인자를 빼먹고 num만 들어간 것인데 어떻게 가능한 걸까?

 

self 가 '자기자신' 이기에 가능하다.

 

즉 sum_res.(sum_1,2) == sum_1(2) 의 의미이다.

 

이제 self = 자기자신 = sum_1 이란 것을 이해할 수 있을 것이다.

 


 

__init__

 

인스턴스가 생성될 때 항상 실행되는 것이다.

 

흔히 initialize를 떠올릴 수 있다.

 

class sum_res:
    def __init__(self):
        self.result = 0
        
    def adder(self, num):
        self.result += num
        return self.result
        
sum_1 = sum_res()
sum_2 = sum_res()
sum_3 = sum_res()

위 코드에서 sum_res Class를 통해 sum_1, sum_2, sum_3 의 인스턴스가 생성되었는데

 

각 인스턴스가 실행될 때는 항상 __init__ 함수가 실행된다.

 

각각 자신의 result를 0으로 만들어 준다는 것이다.

 


 

추가적인 예시코드

 

class Student:
    name = ''

    korean = 0

    english = 0

    math = 0

    def __init__(self, name, kor, eng, math):

        self.name = name

        self.korean = kor

        self.english = eng

        self.math = math

    def say_hello(self):

        return '안녕하세요 {}님'.format(self.name)

    def average(self):

        return (self.korean + self.english + self.math) / 3
출처 : www.inflearn.com/questions/4642

 

Student class가 정의되어있고 stu_a 라는 인스턴스를 생성해보자

 

stu_a = Student('내이름', 80, 75, 80)

 

stu_a는 self 에 의해 self를 생략할 수 있었고 __init__ 을 통해 변수를 매개변수를 초기화해줄 수 있었다.

반응형

'공부 > 기타' 카테고리의 다른 글

코딩테스트 SQL (MySQL)  (2) 2021.04.13
딥러닝, 데이터분석 pandas 기본사용  (0) 2021.04.06
Git 개념 및 사용 2  (0) 2021.02.07
Git 개념 및 사용법 1  (0) 2021.02.07
docker 개념과 기본 사용  (0) 2021.02.04