본문 바로가기

Python

Python __init__ 초기화함수 그리고 self

.

.

.

.

.

python 을 공부하면서 __init__ 라는 이름을 가진 함수를 본 적이 있을 것이다.

나도 여러번 봤지만 도저히 그냥 넘어갈 수가 없는 구간이 와버렸다.

그래서 차근차근 하나씩 알아보려고 한다!!

 

 

 

 

- 오늘 참고할 스크립트

class TestSpawn :
    def __init__(self, setName): 
        print('A')
        print('B')
        self.setName = setName 
        print(self.setName)

a = TestSpawn("1234") 
print('live')
ta = [1,2,3] 
ta.pop(0) 
ta.append(a.setName)

 

 

아.. 벌써 어지럽다.

 

via GIPHY

 

 

 

그래도 이걸 헤쳐나가야 개발자가 될 수 있다고!!!

 

우선 로직부터 파악해볼까요?

자자 왼쪽에 정렬된 숫자를 잘 봐주세요

 

 

 

아니 1번 라인이 3개에요!! 이거 완전 사짜 아냐?

네.. 사짜 아닙니다..

진짜로 a 객체가 호출됨과 동시에 저~~~위에 TestSpawn 클래스로 올라가서 __init__ 메서드까지 직행한답니다.

그리고 setName 에 TestSpawn이 인자로 받은 1234 가 들어가게 되요. 앞으로 setName 은 1234 라고 봐도 무방하죠!

 

setName 왼쪽에 self 는 뭐냐고요? 저건 1234 자신입니다. 무슨 소리냐고요?

지금 이 글을 읽고 있는 당신, 이름이 있겠죠? 누군가가 당신을 부를 때? 이름을 부르겠죠, 'OO아~!' 하면서요. ->setName

그런데 당신, 누군가에게 본인을 가리킬 때 어떻게 얘기하나요? '나는요,~~~' 이렇게 '나' 라고 하겠죠. ->self

setName은 당신이 부모님께 부여받은 이름이고, 누군가가 당신을 지칭할 때 setName을 불러줍니다.

그리고 본인을 누군가에게 소개하거나 알려줄 땐 self 로 부릅니다. 어떤가요. 조금 이해가 가셨나요?

 

조금 헷갈려도 다음 순서로 넘어가면서 큰 흐름을 먼저 읽어봅시다! 그리고 다시 위를 보면 이해가 갈지도 몰라요.

 

1이 3개가 지났습니다.

2, 3번 라인은 너무나도 익숙하네요. 바로 A 와 B 를 출력해줍니다.

 

4번 라인에 self 가 나왔네요. 그런데 self 뒤에 setName이 붙었어요. self.setName. 그대로 해석해볼게요.

self를 setName으로 부를게. -> 나를 1234 로 부를게. 해석 끝!

 

5번 라인 self.setName 을 print하래요.

아까 4번 라인에서 해석한 것을 눈치챘다면 이 5번 라인에선 높은 확률로 1234가 출력되겠어요!

 

---여기까지 TestSpawn 클래스가 끝났습니다.

 

6번 라인 너무 땡큐네요. live 출력해줍니다.

 

7번 라인 [] list가 나왔네요. 1,2,3 을 엘레멘트로 가지는 ta 라는 이름의 list 를 할당해주었습니다.

 

8번 라인에 pop 이 나왔어요. pop 은 list 의 엘레멘트 제거 함수입니다. 8번 라인처럼 작성하게 되면 해당 list 의 인덱스넘버 0번을 삭제시켜준답니다. 그렇기때문에 ta list 의 인덱스넘버 0번, 엘레멘트 1이 삭제되겠네요.

 

9번 라인 어우 온점이 2개나 나왔어요. 복잡해보여요 벌써... 그래도 작게 나누어서 봅시다.

괄호 안에 a.setName 을 Q 라고 하고 다시 작성해보면 ta.append(Q) 가 되겠네요. 이것 먼저 해석해봅시다.

ta 는 아까 7번 라인에 나왔던 것처럼 list 이죠. list에 append! append 는 네이버에 검색해보면 붙이다 라는 뜻을 가진 단어에요. 그대로 ta list 에 append 붙입니다. 뭐를? Q 를요.

 

이제 Q를 꺼내서 a.setName 으로 볼게요.

이 a.setName 은요. 1번 라인의 a = TestSpawn("1234") 와 똑같은 녀석입니다. 왜냐고요? 그냥 외우세요.

그럼 a 객체가 결국 뭐에요? "1234"입니다. 왜냐하면 __init__ 함수에 self 를 제외한 인수를 받는 것은 "1234" 밖에 없었으니까요.

그렇게 이 9번 라인을 해석하면

ta list에 붙일거야 뭐를? "1234" 를.

 

로직 파악이 끝났습니다.

 

이제 뭐하냐고요? 깔끔하게 만든 스크립트 한번 보고 가세요.

 

class TestSpawn :
    def __init__(self, setName): #self = 만들어질 객체, setName = 들어올 인수
        print('A')
        print('B')
        self.setName = setName # 만들어질 객체에 인수를 저장
        print(self.setName)

a = TestSpawn("1234") #TestSpawn 클래스에서 '1234'를 setName에 저장한 a 객체를 생성
print('live')
ta = [1,2,3] # 1,2,3 인자를 가진 리스트 ta 를 만듬
ta.pop(0) # indexNum 0 을 가진 엘레멘트 제거.
ta.append(a.setName + str( 1153) + '최강삼성') # ta 리스트에 a의 setName = '1234' 를 인자로 추가

 

문제 : print(ta) 를 출력한다면 어떻게 출력될까요?

재밌게 풀면 제 댓글을 드리겠습니다.

빠이