작성
·
24K
4
self는 정확히 정의가 무엇이고 예시로 어떻게 쓰이는지 저 혼자 따로
self를 이용하여 프로그램을 짜라하면 못만들 것 같아요.
그리고 다른 함수들도 다 self들어가 있는데
이 self를 안적으면 어떻게 되는지 오류가 난다면 왜 오류가 나는지
init생성자가 정의가 정확히 무엇이며
어떨때 쓰이는 것인지
간단한 예제로는 무엇이 있고
다른 class안의 함수와 init생성자의 차이는 무엇이며
생성자는 init하나 밖에 없는지 등 궁금하네요.
답변 3
6
안녕하세요. 다른 예제를 한번 더 보여드릴께요.
클래스에서 self
의 의미는 '자기 자신'을 의미합니다.
아래와 같이 Student
라는 클래스(붕어빵틀)을 만들었어요.
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
이름, 국어, 영어, 수학이라는 4개의 변수를 담을 수 있는 클래스입니다. 말씀하신 것처럼 __init__
이라는 생성자
가 있죠. 이 __init__
은 파이썬에서 클래스의 생성자를 만들때 항상 동일한 규칙입니다. __init__
을 사용하면 클래스명을 쓰고 옆에 바로 인자들을 채워 넣음으로써 그 값들을 지닌 객체를 만들어 낼 수 있죠.
네. 생성자는 init하나입니다!
파이썬에서는 클래스에서 사용하는 함수의 첫번째 인자(parameter)를 self
로 사용하는 것이 원칙입니다.
설명이 어렵다면, 저 위의 코드가 컴퓨터에게 하는 말이 뭔지 풀어서 써볼께요.
"학생Student
이라는 class(붕어빵틀)를 만들거야. 그 class는 이름, 국어, 영어, 수학의 값을 담을 수 있어. 사용자는 생성자를 이용해서 아무개, 국어점수, 영어점수, 수학점수 순으로 인자를 넣어서 인스턴스(붕어빵)를 찍어낼거야.
say_hello
라는 함수는 "안녕하세요. (아무개의 이름)님"이라고 인사하는거야.
평균average
라는 함수도 만들었는데, 그건 아무개의 국어점수, 아무개의 영어점수, 아무개의 수학점수를 다 더한 뒤 3으로 나눈 값을 돌려주는거야"
여기서 아무개는 즉 self
가 되겠죠.
아래와 같이 홍길동
이라는 인스턴스(붕어빵)을 만들어봅시다.
hgd = Student('홍길동', 80, 85, 75)
그리고
print(hgd.math)
하면 75
가 출력될거에요.
여기서 인스턴스 이름은 hgd
이고, 거기에서 점(.
)을 찍으면 그 인스턴스의 변수에 접근할 수 있잖아요? 그래서 hgd
의 math
변수의 값을 출력하니까 75가 되는 것이고요.
그런데 클래스(붕어빵틀)만 있는 상태에서는 hgd
처럼 접근할 수 있는 방법이 없잖아요? 아직 인스턴스가 생성되지 않아서(=붕어빵이 만들어지지 않아서) 딱히 부를 만한 방법이 없잖아요. hgd
는 홍길동이라는 이름을 갖는 인스턴스를 만든 후에나 사용할 수 있으니까요.
아래처럼 김갑수라는 인스턴스도 만들어봤어요.
kgs = Student('김갑수', 95, 90, 85)
그리고 아까 만든 홍길동과 지금 만든 김갑수의 average
함수를 이용해봅시다.
print(hgd.average())print(kgs.average())
결과는
8090
이렇게 나올거에요.
맨 위에서 클래스 선언 할 때는 def average(self)
로 선언했는데, 실제로 사용할 때는 self
는 빼고 그냥 hgd.average()
라고 썼죠. 왜냐하면, 클래스의 함수는 선언할 때 첫번째 인자는 self
라고 선언하는 것이 원칙이고, 사용할 때는 self
는 무조건 주어지는 것이 파이썬의 원칙이니까 그건 빼고 쓰는거에요.
이해가 충분히 되셨는지 궁금하네요. 혹시 더 궁금한 내용이 있으시다면 또 질문 올려주세요. 질문은 언제나 환영입니다.
2
재질문이 들어와 있었네요!! __init__
은 파이썬 사용자간의 약속입니다. 언더바를 앞 뒤에 붙인 __init__
이 아닌 다른 이름으로는 인스턴스를 만들 수 없습니다. 그럼 에러가 날 거에요.
0
사용자는 생성자를 이용해서 아무개, 국어점수, 영어점수, 수학점수 순으로 인자를 넣어서 인스턴스(붕어빵)를 찍어낼거야. 라고 하셧는데,
def init(self, name, kor, eng, math):
self.name = name self.korean = kor
self.english = eng
self.math = math
생성자 init이 아니면
위와 같이 인자를 넣어 인스턴스를 만들 수 없는 것인가요?