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)
아.. 벌써 어지럽다.
그래도 이걸 헤쳐나가야 개발자가 될 수 있다고!!!
우선 로직부터 파악해볼까요?
아니 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) 를 출력한다면 어떻게 출력될까요?
재밌게 풀면 제 댓글을 드리겠습니다.
빠이