강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của hyewon91236912
hyewon91236912

câu hỏi đã được viết

Giới thiệu lập trình và sử dụng tự động hóa công việc cho nhân viên văn phòng

Về lớp

self나 __init__등 정확히 제대로 제 것으로 만들기가 힘들어요.(이해안가요)

Viết

·

24K

4

self는 정확히 정의가 무엇이고 예시로 어떻게 쓰이는지 저 혼자 따로

self를 이용하여 프로그램을 짜라하면 못만들 것 같아요.

그리고 다른 함수들도 다 self들어가 있는데

이 self를 안적으면 어떻게 되는지 오류가 난다면 왜 오류가 나는지

init생성자가 정의가 정확히 무엇이며

어떨때 쓰이는 것인지

간단한 예제로는 무엇이 있고

다른 class안의 함수와 init생성자의 차이는 무엇이며

생성자는 init하나 밖에 없는지 등 궁금하네요.

python

Câu trả lời 3

6

SungYong Lee님의 프로필 이미지
SungYong Lee
Người chia sẻ kiến thức

안녕하세요. 다른 예제를 한번 더 보여드릴께요.

클래스에서 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이고, 거기에서 점(.)을 찍으면 그 인스턴스의 변수에 접근할 수 있잖아요? 그래서 hgdmath변수의 값을 출력하니까 75가 되는 것이고요.

그런데 클래스(붕어빵틀)만 있는 상태에서는 hgd처럼 접근할 수 있는 방법이 없잖아요? 아직 인스턴스가 생성되지 않아서(=붕어빵이 만들어지지 않아서) 딱히 부를 만한 방법이 없잖아요. hgd는 홍길동이라는 이름을 갖는 인스턴스를 만든 후에나 사용할 수 있으니까요.

아래처럼 김갑수라는 인스턴스도 만들어봤어요.

kgs = Student('김갑수', 95, 90, 85)

그리고 아까 만든 홍길동과 지금 만든 김갑수의 average함수를 이용해봅시다.

print(hgd.average())

print(kgs.average())

결과는

80

90

이렇게 나올거에요.

맨 위에서 클래스 선언 할 때는 def average(self)로 선언했는데, 실제로 사용할 때는 self는 빼고 그냥 hgd.average()라고 썼죠. 왜냐하면, 클래스의 함수는 선언할 때 첫번째 인자는 self라고 선언하는 것이 원칙이고, 사용할 때는 self는 무조건 주어지는 것이 파이썬의 원칙이니까 그건 빼고 쓰는거에요.

이해가 충분히 되셨는지 궁금하네요. 혹시 더 궁금한 내용이 있으시다면 또 질문 올려주세요. 질문은 언제나 환영입니다.

2

SungYong Lee님의 프로필 이미지
SungYong Lee
Người chia sẻ kiến thức

재질문이 들어와 있었네요!! __init__은 파이썬 사용자간의 약속입니다. 언더바를 앞 뒤에 붙인 __init__이 아닌 다른 이름으로는 인스턴스를 만들 수 없습니다. 그럼 에러가 날 거에요.

0

hyewon91236912님의 프로필 이미지
hyewon91236912
Người đặt câu hỏi

사용자는 생성자를 이용해서 아무개, 국어점수, 영어점수, 수학점수 순으로 인자를 넣어서 인스턴스(붕어빵)를 찍어낼거야. 라고 하셧는데,

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

    self.name = name

self.korean = kor

self.english = eng

self.math = math

생성자 init이 아니면

위와 같이 인자를 넣어 인스턴스를 만들 수 없는 것인가요?

Hình ảnh hồ sơ của hyewon91236912
hyewon91236912

câu hỏi đã được viết

Đặt câu hỏi