혼자 공부하는 파이썬 45강 - 클래스 도입

  Рет қаралды 26,541

윤인성

윤인성

Күн бұрын

Пікірлер: 141
@yoogyeongna9663
@yoogyeongna9663 Жыл бұрын
온라인 오프라인 강의 많이 들어도 이해가 안됐는데, 어떤 식으로 사용되는지 직관적으로 깔끔하게 설명해주셔서 많은 도움이 됐습니다. 프로그래밍 최고의 선생님이세요👍 좋은 강의올려주셔서 감사합니다.
@윤인성
@윤인성 Жыл бұрын
앗 클래스 관련 내용은 개정판이 더 길게 설명해서 혼자 공부하는 파이썬 개정판 78강 - 객체 지향 프로그래밍이란? kzbin.info/www/bejne/noOXoaqBq9dmqdE 여기를 참고하시는 것을 추천드립니다! 훨씬 자세합니다.
@hanadoll01
@hanadoll01 5 жыл бұрын
영상 감사합니다. 갑자기 더 잘 생겨 지신 것 같네요 ^^;
@junhyeokkim6854
@junhyeokkim6854 4 жыл бұрын
저만 그런생각을 한게 아니였군요ㅋㅋ
@leojeon5728
@leojeon5728 2 жыл бұрын
와...기존 C만 하던 사람인데 비교영상이 정말 유일한것 같습니다.. 정말 이해 잘되고 한번 연습해봐야겠습니다. 감사합니다!!
@hansjo3767
@hansjo3767 3 жыл бұрын
영어 어순으로 클래스 내용을 설명해주시는 거 처음 들었습니다. 선생님 실력이 탁월하셔요....
@싸우지맙세효
@싸우지맙세효 3 жыл бұрын
선생님 존잘이셨네요..
@인형가방-w6c
@인형가방-w6c 5 жыл бұрын
여태 본 강의중 클래스를 가장 명확하게 설명해 주신 것 같네요. 감솨.
@KHoon.
@KHoon. 5 жыл бұрын
코드를 조금씩 바꾸면서 비교해주셔서 클래스 이해가 더 잘됩니다. 감사합니다
@vbas9501
@vbas9501 2 жыл бұрын
[질문] 아래와 같이 class 문을 생성했는데... 오류가 발생합니다. File "C:\03. Python\Test.py", line 33, in student.출력() AttributeError: '학생' object has no attribute '출력' 뭐가 원인인지 알수있을까요? --------------구문-------------- #1. 클래스를 선언합니다. class 학생: # 클래스 내부에 함수를 만들고 self로 반환받습니다. def __init__(self,name,korean,math,eng,science): self.name = name self.korean = korean self.math = math self.eng = eng self.science = science #2. 총점/평균/출력을 함수를 만듭니다. def 총점(self): return self.korean + self.math + self.eng + self.science def 평균(self): return self.총점()/4 def 출력(self): print(self.name, self.총점(), self.평균(), sep="\t") #3. 학생 리스트를 만듭니다. students = [ 학생("윤인성", 87 , 98 , 88, 95), 학생("윤여장", 87 , 98 , 88, 95), 학생("연하진", 87 , 98 , 88, 95), 학생("구지연", 87 , 98 , 88, 95), 학생("나선주", 87 , 98 , 88, 95), 학생("윤아린", 87 , 98 , 88, 95) ] #4. 항목을 만듭니다. print("이름","총점","평균",sep="\t") #5. 학생을 한명씩 반복합니다. for student in students: student.출력()
@vbas9501
@vbas9501 2 жыл бұрын
답을 찾았네요 죄송합니다 ~
@jieunson9759
@jieunson9759 4 жыл бұрын
클래스를 이렇게 잘 설명하는 강의는 처음이네요!! 많은도움이 되었어요. 감사합니다.
@hkh7996
@hkh7996 3 жыл бұрын
아니 강의도 갈수록 어렵지만 업그레이드 되는건 당연한건데 인성님 미모도 같이 정비례하고 있네여 ~~~ 아 나도 젊을때 라식했었어야해
@jaeilnam9219
@jaeilnam9219 4 жыл бұрын
교재 379~380쪽의 object_4_class.py를 연습하는 과정에서 수차례 대조를 해도 실행결과가 도저히 나오지 않아 세부적으로 대조한 결과, 들여쓰기(indentation) 오류를 찾았습니다. 10/11/12번 라인에서 들여쓰기를 맞추지 않았습니다.파이썬에서는 들여쓰기를 맞추지 않으면 오류가 나오는 게 정상인가요, 시스템적으로 그렇게 만들어 진 것인가요?
@윤인성
@윤인성 4 жыл бұрын
넵 들여쓰기가 곧 블록입니다 'ㅁ'
@최원준-o5t
@최원준-o5t 3 жыл бұрын
강의 너무나 잘 보고 있습니다. 한가지 질문이 있습니다. print함수 마지막 부분에 있는 sep="\t" 는 무슨 의미인가요?. 또한 위와 같은 형태가 중간에 간간히 나오던데 나중 강의에 따로 가르처 주시나요?
@윤인성
@윤인성 3 жыл бұрын
책에서 간단하게 언급을 하지만, 너무 사소한 내용이므로 자세하게 다루거나 하지 않습니다!
@최원준-o5t
@최원준-o5t 3 жыл бұрын
@@윤인성 아. 알겠습니다!!
@geodata61
@geodata61 Жыл бұрын
진짜 사랑합니다. 너무 좋다
@조민경-m7c
@조민경-m7c 6 ай бұрын
정말 감사해요!! 설명이 명확하십니다!!
@min-yeongkang3162
@min-yeongkang3162 4 жыл бұрын
객체지향, 궁금했던 내용인데 재미있게 잘 들었습니다. 강의를 따라가던 중 질문이 있습니다. 1) 강의에서 우리가 '학생'이라는 객체를 만들었다고 말할 수 있는건가요? 2) 저는 위와 같이 이해를 하고, 강의 내용 코드 마지막 부분에 for student in students: 학생.출력(student) 라고 작성한 후 실행을 하니 원하는 결과가 나왔습니다. 그런데 강의에서는 for student in students: student.출력(student) 라고 작성하셨길래 이와 같이 저도 해보았더니 제 경우에는 아래와 같은 에러가 발생합니다: TypeError: 출력() takes 1 positional argument but 2 were given 어떠한 차이가 이런 문제를 발생시키는 것인지 궁금합니다. 혹시나 해서 제 코드도 아래에 붙입니다 (사실 강의 내용 그대로 작성했다고 생각하는데 혹시나 해서 올려드립니다) =========================================== class 학생: def __init__(self,name,korean,math,english,science): self.name = name self.korean = korean self.math = math self.english = english self.science = science def 총점(self): return self.korean + self.math +\ self.english + self.science def 평균(self): return self.총점()/4 def 출력(self): print(self.name,self.총점(),self.평균(),sep="\t") students = [ 학생("윤인성",87,98,88,95), 학생("연하진",92,98,96,98), 학생("구지연",76,96,94,90), 학생("나선주",98,92,96,92), 학생("윤아린",95,98,98,98), 학생("윤명월",64,88,92,92) ] print("이름","총점","평균",sep="\t") for student in students: student.출력(student)
@윤인성
@윤인성 4 жыл бұрын
1. 프로그래밍은 정의하기 나름입니다. 개발자가 의도한 형태로 구현했다면, 객체는 제대로 구현된 것입니다. 2. "동사(목적어)" 형태가 "주어.동사()"로 바뀌었으므로, student.출력(student)를 하시면, 같은 객체의 정보가 2번 사용된 것이 됩니다. "출력()"이라는 함수는 매개 변수로 별다른 것을 받지 않으므로, 매개 변수를 지워주세요. 참고적으로 현재 오류는 이전에 함수를 다룰 때 언급했던 것처럼 꽤 자주 등장하는 오류이므로, 눈도장 쾅 찍어두시면 좋을 것 같습니다(매개변수 개수가 정의와 다를 때 뜨는 오류 중 하나입니다).
@min-yeongkang3162
@min-yeongkang3162 4 жыл бұрын
@@윤인성 감사합니다. 명쾌하게 이해가 됩니다. def 출력(self): 라고 정의할 때 self만 있으면 따로 매개변수가 들어오지 않는다는 것을 깜빡했습니다. 혹시 이에 딸린 질문을 하나 더 드릴 수 있을까요. 위 케이스에서 학생.출력(student) 이라고 작성할 경우 프로그램이 정상작동하는 이유는 무엇인지 궁금합니다. 학생.출력(student) 은 동사(목적어) 형태로 적절하게 표현이 되서인지요?
@윤인성
@윤인성 4 жыл бұрын
@@min-yeongkang3162 파이썬이 객체 지향과 함수 지향의 중간적인 느낌을 가진 프로그래밍 언어라서, 그런 문법이 허용되지만, 실제로는 사용하지 않는 코드입니다. 그냥 학생에 학생.출력(self)라고 정의한 함수로 들어갈 뿐입니다.
@반재길
@반재길 4 жыл бұрын
질문이 있습니다. # 딕셔너리를 리턴하는 함수를 선언합니다. def create_student(name, korean, math, english, science): return { "name": name, "korean": korean, "math": math, "english": english, "science": science } # 학생을 처리하는 함수를 선언합니다. def student_get_sum(student): return student["korean"] + student["math"] +\ student["english"] + student["science"] 이부분에서 궁금한게 생겼는데요. 위에 딕셔너리 리턴 함수까지는 이해했습니다. 그 밑에 이제 총합 함수를 만드는부분인데 student 매개변수로 받는다고 해도 아직 student는 정의되지 않은 변수 아닌가요?? student 는 딕셔너리도 아닌데 어떻게 키값들을 더할수 있는걸까요?? ㅠㅜ 이해가 안갑니다. ㅠㅜ
@윤인성
@윤인성 4 жыл бұрын
- 함수 선언 때의 매개 변수는 실체가 없습니다(그래서 깊게 들어가면 이를 parameter라는 이름으로 분류합니다). - 함수 호출 때에 넣는 매개 변수는 실체(값이 있는 것)입니다(그래서 깊게 들어가면 이를 arguments라는 이름으로 부릅니다). 함수 선언 때의 괄호에 있는 매개변수(parameter)는 단순한 변수입니다. 그냥 "어떤 값이 들어오면 이렇게 저렇게 할 것이다"를 정의한 상자입니다. 변수의 이름이 같아서 헷갈리신 것 같은데 def student_get_sum(a): ..return a["korean"] + a["math"] +a["english"] + a["science"] 처럼 해도 됩니다. a는 그냥 변수일 뿐이니까요.
@박우성-v4x
@박우성-v4x 4 жыл бұрын
안녕하세요 강의 듣다가 질문드려요! 4:38 에서 코드 score_sum = student["korean"] + student["math"] + student["english"] + student["science"] score_average = score_sum / 4 를 왜 이렇게 def student_sum(student): return student["korean"] + student["math"] + student["english"] + student["science"] def student_average(student): return student_sum(student) / 4 def student_string(student): def로 나눈건가요? 위 코드가 더 짧고 간단해 보여서요
@윤인성
@윤인성 4 жыл бұрын
다른 경우에 더 활용해볼 수 있게 분해한 것입니다. 만약 총합 등을 활용할 이유가 전혀 없는 클래스이고, 평균만 사용한다면 지금 말씀해주신 형태로 만드셔도 괜찮습니다!
@김호진-u9v
@김호진-u9v 4 жыл бұрын
클래스에 입력된 정보를 조회 하는 프로그램은 어떻게 짜나요?? 예시로 윤인성/연하진/... 의 학생의 이름을 입력하면 각 과목의 점수, 평균, 총점이 출력하도록 하는 프로그램 같은거요!!
@윤인성
@윤인성 4 жыл бұрын
반복문을 돌면서 396페이지 같은 형태로 하나하나 출력해야 합니다.
@rick13299
@rick13299 3 жыл бұрын
와...정말 잘 듣고 있습니다 감사합니당(책도 구매했어요)
@drkim8425
@drkim8425 2 жыл бұрын
이전 강의까지 보고 후기를 남깁니다. 혼공파 책을 산지는 2년이 되었고, 한번 정도 눈으로 완독을 했었네요. 책보다는 강의가 대단하네요. 사실 책은 쉽게 한번 가볍게 본거 같은데 남는게 별로 없었던거 같습니다. 이번에 우연하게 강의를 알게되어서 처음부터 보고 있습니다. 저 같은 경우 파이썬을 다른 책으로 처음 공부를 했었고, 옛날 스타일 파이썬 코드를 이용해서 짜다 말다 하고 있었습니다. 사실 저는 다른 언어를 오랫동안 이용했고, 파이썬은 거의 쓰지 않았습니다, 거의 겉핥기 정도의 파이썬 지식으로 사용했습니다. 그래서 항상 파이썬을 이용할 때마다 뭔가 이해가 안가는 부분이 있고, 자주 쓰지 않다보니 까먹는 부분이 있었습니다.이번에 약 3일만에 이번 강의까지 봤는데 머리속이 많이 정리가 되는 느낌이네요. 특히 리스트 컴프리헨션 나올때 감동먹었습니다. 책으로는 머리에 남지않고 스쳐가는 부분이 강사님의 동영상 강의를 통해 보면 확실하게 개념이 잡히고 머리에 남습니다. 동영상 강의라는 매체가 주는 효과는 정말 강력하군요. 개정판 강의도 시작하신 거 알고 있습니다. 아마 이 강의 한번더 돌려서 보고 개정판도 살 예정입니다. (개정판 책을 사야할 이유가 있을지는 모르겠지만 일단 사놓고 봐야겠군요.)
@hyeonhoonlee4520
@hyeonhoonlee4520 4 жыл бұрын
10:51 에서 출력(student)가 왜 student.출력()으로 바뀌어야하는지 궁금합니다.. 클래스를 도입하게되면 모든 출력 구문이 그러한형태로 바뀌어야하나요?
@윤인성
@윤인성 4 жыл бұрын
파이썬으로 "파이썬을 사용하는 개인"이 아주 큰 프로그램을 개발하지는 않으므로, 필요에 따라서 아무것이나 사용하시면 됩니다. 어떻게 보면 이념적인 문제라서(객체 지향 이념을 따르냐, 절차적 이념을 따르냐), 확실한 기준을 드릴 수는 없을 것 같습니다. 둘 다 익숙해지고 상황 따라 둘 다 쓰시면 될 것 같습니다.
@hyeonhoonlee4520
@hyeonhoonlee4520 4 жыл бұрын
@@윤인성 감사합니다!
@애니-g5d
@애니-g5d 4 жыл бұрын
6시간이나 찍으셨다니ㅠㅠ수고 많으셨습니다!! 파이썬 공부하는데 큰 도움이 되고 있습니다 :)
@realyu8jv5
@realyu8jv5 3 жыл бұрын
class 학생 : def __init__(self,name,korean,math,english,science): #클래스 내부함수 첫번째 매개변수로 반드시 self self.name = name, self.korean =korean, self.math =math, self.english =english, self.science = science def 총점(self): return self.korean + self.math +\ self.english + self.science def 평균(self): return self.총점() / 4 #함수 호출 :self.함수() def 출력(self): print(self.name,self.총점(),self.평균(),sep="\t") students = [ 학생("윤인성", 84,98,78,98), 학생("연하진", 93,95,74,92), 학생("구지연", 92,87,76,98), 학생("김호창", 88,95,78,84), 학생("윤아린", 85,87,78,81), ] print("이름","총점","평균",sep="\t") for student in students : student.출력() 이렇게 하니까 TypeError: can only concatenate tuple (not "int") to tuple 이렇게 뜨는데 뭐가 잘못된걸까요 ?
@윤인성
@윤인성 3 жыл бұрын
__init__() 내부에서 - self.name = name,
@realyu8jv5
@realyu8jv5 3 жыл бұрын
@@윤인성 감사합니닷!!!! ♡
@bbossam_jjudy
@bbossam_jjudy 3 жыл бұрын
우와. 6시간이라니.. 그만큼 너무 잘 설명해 주신것 같습니다. 수고 감사드려요~~ 화면 영상도 크고 더 화질이 좋아진 것 같아요. 훨씬 이쁘게 보이십니다.^^
@쑤야
@쑤야 4 жыл бұрын
다음강의에서 봤을때 해당 클래스의 함수들이나 이런것들을 호출하기위해선 인스턴스화?(맞는표현인지 모르겠네요..) 를 통해서 클래스와 연결해준다음 그 클래스안에 있는 함수들을 호출하는것 같던데 이 강의에서는 리스트를 통해서 인스턴스화를 시킨건가요? 그리고 혹시 self를 넣지 않으면 어떻게 되는지도 궁금하네요. 넣지 않아도 사용할수있으면 어쩔때 어떻게 사용하는지도 궁금합니다
@윤인성
@윤인성 4 жыл бұрын
1. 인스턴스화라는 것 자체가 "클래스를 기반으로 객체를 찍어내는 과정"을 용어로 나타낸 것입니다. 따라서 사실 리스트를 통해서 인스턴스화를 했다고 말하기는 표현하기 힘들 것 같습니다. 인스턴스화는 연결보다는 그냥 "그 기능을 갖고 있는 만드는 것"이라고 생각하는 것이 좋을 것 같습니다. 2. self는 클래스 내의 멤버 함수라면 무조건 적어주셔야 합니다.
@쑤야
@쑤야 4 жыл бұрын
@@윤인성 그럼 studend = Student() 같은 걸 미리 해줘야 그 해당 객체가 클래스 안에 있는 함수들을 호출해서 쓸수잇는걸로 이해했는데 꼭 그런건 아닌가요?
@윤인성
@윤인성 4 жыл бұрын
@@쑤야 그 과정이 연결이 아니라, student라는 객체를 생성하는 생성 행위입니다...!
@이상혁-k2q
@이상혁-k2q 5 жыл бұрын
선 따봉 후 감상입니다. 항상 감사합니다
@리어스-v5k
@리어스-v5k 2 жыл бұрын
선생님!! 클래스 입력할때 self.name ~부터 self. 부분들에서 계속 오류가 나요 ㅠㅠㅠ "self" is not defined pylance(reportundefinedvariable)이라는 게 계속 떠요 구글링도 해보고 물어도 봤는데 해결이 안돼요 ㅠㅠ
@윤인성
@윤인성 2 жыл бұрын
매개변수에 self를 넣었는지 확인해주시고 + 에디터에서 오류 나는 것은 아무 상관 없으므로, 그냥 진행하시면 됩니다![그냥 이상하게 내부적으로 꼬인 것으로 보입니다] → 만약 실행했을 때 오류가 난다면, 전체 코드와 실행했을 때 뜨는 오류를 올려주세요.
@리어스-v5k
@리어스-v5k 2 жыл бұрын
@@윤인성 해결했어요 ㅠㅠ 줄간격 안맞춰서 그러네요 ㅠㅠㅠㅠㅠㅠ 감사합니다 ㅠㅠ
@jslee6499
@jslee6499 2 жыл бұрын
선생님 안녕하세요.. 설명은 정말 잘 이해된거 같은데 계속 bound method라고 나오는데 뭐가 문제인 지 도저히 모르겠네요 ㅠㅠ 도움 부탁드립니다 감사합니다! class 학생: def __init__(self, name, korean, english, math, science): self.name = name self.korean = korean self.english = english self.math = math self.science = science def 총점(self): return self.korean + self.english + self.math + self.science def 평균(self): return self.총점() / 4 def 출력(self): print(self.name, self.총점, self.평균, sep="\t") students = [ 학생("윤인성", 97, 87, 54, 46), 학생("연하진", 46, 28, 97, 87), 학생("구자연", 71, 83, 28, 68), 학생("나선주", 57, 86, 67, 81), 학생("윤아린", 25, 76, 84, 28) ] print("이름","총점","평균", sep="\t") for student in students: student.출력()
@윤인성
@윤인성 2 жыл бұрын
총점과 평균이 현재 함수(메서드)이므로, 호출해서 사용하셔야 합니다. def 출력(self) 내부에 있는 self.총점과 self.평균 뒤에 ()를 붙여주세요!
@김정모-x5l
@김정모-x5l 3 жыл бұрын
클래스 변수에 대해서 질문드립니다. 클래스 변수는 클래스 이름을 통해서 접근 할 수도 있고, 객체를 통해서 접근 할 수도 있고, 클래스 변수는 모든 객체가 공유한다고 알고 있습니다. 그런데 몇가지 코드를 테스트 해보다가 이해가 안되는 상황을 만났습니다. class Student: # 클래스 정의 student_count = 0 # 클래스 변수 선언 def __init__(self, name, number, grade, details): self._name = name self._number = number self._grade = grade self._details = details Student.student_count += 1 student1 = Student('Kim', 1, 2, {'gender':'Male', 'score':88}) # student1 객체 생성 student2 = Student('park', 2, 3, {'gender':'Female', 'score':99}) # student2 객체 생성 print(Student.student_count) # 2 출력 print(student1.student_count) # 2출력 print(student2.student_count) # 2출력 print() student1.student_count = 7 # student1 객체를 통해서 클래스 변수에 접근 student2.student_count = 10 # student2 객체를 통해서 클래스 변수에 접근 # 위 코드에서 객체가 클래스 변수를 공유하고 있다면 클래스 변수에는 최종적으로 10이 저장되어 있어야 한다고 생각합니다. # 따라서 아래 코드 실행시 모두 10이 출력되야한다고 생각합니다. # 하지만 실제 실행을 해보면 모두 10이 출력되는 되지 않습니다. # 이부분이 이해가 가지 않습니다. print(Student.student_count) # 2 출력 print(student1.student_count) # 7출력 print(student2.student_count) # 10 출력 print() Student.student_count = 15 # 클래스 변수에 15 저장 # 위 코드에서 클래스 변수에 15를 저장했기 때문에 # 아래 코드에서는 모두 15를 출력되야 한다고 생각합니다. # 하지만 출력 결과는 모두 15가 출력 되지 않았습니다. # 이 부분도 이해가 가지 않습니다. print(Student.student_count) # 15 출력 print(student1.student_count) # 7 출력 print(student2.student_count) # 10 출력
@윤인성
@윤인성 3 жыл бұрын
이게 파이썬에서 클래스 변수를 student1.student_count 형태로 인스턴스를 잡고 호출하지 않는 대표적인 이유인데[설계가 글러먹어서][...].... # get을 할 때 student1.student_count → student1이 student_count를 갖는지 확인 → 없으면 클래스(Student)가 student_count를 갖는지 확인합니다. 따라서 student1에 student_count가 없다면 클래스 변수를 활용합니다. # set을 할 때 student1.student_count = 10이라고 하면 파이썬은 문법적으로 이게 인스턴스에 넣는 것인지, 클래스에 넣는 것인지 구분을 못합니다. 그래서 곧바로 인스턴스 변수로 때려 넣습니다. # 현재 결과 set으로 인해서 student_count라는 인스턴스 변수가 생겼으므로 student1.student_count를 출력하면 인스턴스에 있다고 생각해서 바로 내뺍니다[뒤에 클래스 변수가 존재하지만, 인스턴스 변수가 가려서 접근을 못 합니다]. # 이 현상은 C,자바,C#처럼 자료형이 고정되는 프로그래밍 언어는 발생하지 않지만 자바스크립트,파이썬,루비처럼 자료형이 고정되지 않는 프로그래밍 언어에서는 많이 발생하는 문제라 클래스 변수는 최대한 클래스를 잡고 넣고 빼고 하시는 것을 추천드립니다!
@김정모-x5l
@김정모-x5l 3 жыл бұрын
@@윤인성 설명이 너무 상세해서 완벽히 이해 하였습니다. 인스턴스를 통해서 클래스변수에 set을 하려고 할때, 해당 인스턴스에만 인스턴스 변수가 할당되는 것을 확인하였습니다. 클래스 변수를 사용할때 인스턴스를 통해서 set만 하지 않는다면 전혀 문제가 되지 않네요. 너무너무 감사합니다.
@ymoon1847
@ymoon1847 3 жыл бұрын
정주행 한 번 하고 한 바퀴 더 들어야 겠습니다. 감사합니다!
@SB03310
@SB03310 4 жыл бұрын
class 학생: def __init__(self, name, korean, math, english, science): self.name = name self.korean = korean self.math = math self.english = english self.scince = science def 총점(self): return self.korean + self.math+\ self.english + self.science def 평균(self): return self.총점() / 4 def 출력(self): print(self.name, self.총점(), self.평균(), sep="\t") print("이름", "총점", "평균", sep="\t") students = [ 학생("윤인성", 87, 98, 88, 95), 학생("연하진", 92, 98, 96, 98), 학생("구지연", 76, 96, 94, 90), 학생("나선주", 98, 92, 96, 92), 학생("윤아린", 95, 98, 98, 98), 학생("윤명월", 64, 88, 92, 92) ] for student in students: student.출력() 라고 했는데 AttributeError: '학생' object has no attribute '출력' 이런 오류가 뜨네요. 아래 댓글 살펴보니까 똑같은 에러가 난 것 같은데, 답글이 없어서 질문합니다. 좋은 강의 감사합니다. 덕분에 새로운 지식을 많이 얻게 되었습니다.
@윤인성
@윤인성 4 жыл бұрын
클래스 내의 함수는 들여쓰기를 클래스 안에서 한 단계 더 넣어주셔야 합니다[지금 총점 평균 출력 앞에 들여쓰기 하나씩 넣어주세요!]
@우우-o3s
@우우-o3s Жыл бұрын
객체 지향 이제야 알게 되었어요ㅠ 너무 좋아요!!!
@윤인성
@윤인성 Жыл бұрын
앗 클래스 관련 내용은 ”개정판 강의“ 쪽이 훨씬 자세하니 그쪽 강의도 참고해주세요!!
@윤인성
@윤인성 Жыл бұрын
혼자 공부하는 파이썬 개정판 78강 - 객체 지향 프로그래밍이란? kzbin.info/www/bejne/noOXoaqBq9dmqdE 여기부터입니다!
@hansjo3767
@hansjo3767 3 жыл бұрын
지금 저의 실력으로는 처음에 설명해 주신 반복문 형태가 가장 편해보입니다....갈 길이 멀다!!!
@임효정-p1n
@임효정-p1n 4 жыл бұрын
설명이 정말 깔끔하고 좋아요! 감사합니다 bb
@_17_12
@_17_12 3 жыл бұрын
제가 모든 강의를 듣는 것이 아니라서 배우지 못했던 거 같은데 ㅠ 혹시 6분 40초정도에 3행~8행을 묶어서 한번에 "{"를 지우시고 한번에 코드를 입력하시던데 어떻게 하는지 알려주실 수 있을까요?ㅠㅠ
@윤인성
@윤인성 3 жыл бұрын
6강 마지막 부분에서 다루는데, Ctrl + Alt 누르고 방향키 위 아래 드래그 해주시면 됩니다...!
@seokmin7264
@seokmin7264 3 жыл бұрын
클래스까지 달려왔습니다!! 너무 재밌어요ㅎㅎ
@macgyverkwon8214
@macgyverkwon8214 3 жыл бұрын
안녕하세요. 너무나 좋은강의 감사합니다. 잘 따라하고 있는데요... 클래스를 이용한 프로그래밍 예제를 그대로 따라쳤는데... 저는 "AttributeError: 'student' object has no attribute 'output'"라는 오류가 발생합니다. 뭐가 문제인제 아무리 찾아봐도 제 눈에는 보이지 않네요. 한 번 확인해주실 수 있는지요? class student: def __init__(self, name, korean, math, english, science): self.name = name self.korean = korean self.math = math self.english = english self.science = science def total(self): return self.korean + self.math + self.english + self.science def average(self): return self.total() / 4 def output(self): print(self.name, self.total(), self.average(), sep='\t') students = [ student('person1', 76, 98, 87, 99), student('person2', 56, 48, 82, 99), student('person3', 46, 98, 88, 99), student('person4', 77, 78, 47, 99), student('person5', 96, 68, 67, 99) ] print('Name', 'Total', 'Average', sep='\t') for student in students: student.output() 감사합니다.
@윤인성
@윤인성 3 жыл бұрын
들여쓰기 문제입니다! 메서드는 클래스 안에 넣어주셔야해서 메서드 전부 들여쓰기 하나씩 밀어넣어 주셔야 합니다![__init__과 같은 들여쓰기 단계에 오게 아래 메서드들을 전부 들여쓰기 넣어주세요!]
@macgyverkwon8214
@macgyverkwon8214 3 жыл бұрын
@@윤인성 그렇네요... 들여쓰기가 이렇게 중요한지 다시 한 번 깨닫게 되네요. 감사합니다.
@zyllianas
@zyllianas 3 жыл бұрын
엇...여태 예제들 직접 다 입력하고 있었는데, 좀 많다고 생각해서 어디서 복사해오지 보니까... 책에 소스코드 받는곳이 적혀있었군요...ㅋㅋㅠㅠㅠㅠㅠ 여태모르다가 여기까지 들어서야 알게되었네요 ㅋㅋㅠ
@sangwoonoh7438
@sangwoonoh7438 3 жыл бұрын
def 평균(b): return 총점(student) / 4 def 출력(c): print(student["name"], 총점(student), 평균(student), sep="\t") 함수를 선언하는 함수명에선 매개변수로 아무문자나 넣어도 작동이 되는데 return 값에서 총점을 부르거나 print문에서 총점하고 평균을 부를시에 왜 매개변수에 꼭 student여야 하는지 잘 모르겠습니다.
@윤인성
@윤인성 3 жыл бұрын
앗 현재 코드만 보면, 말씀해주신 것처럼 "왜 student"인지 모르는 상황이라, 전체 코드를 올려주실 수 있을까요!
@sangwoonoh7438
@sangwoonoh7438 3 жыл бұрын
@@윤인성 def 학생_생성(name, korean, math, english, science): return { "name": name, "korean": korean, "math": math, "english": english, "science": science } def 총점(a): return student["korean"] + student["math"] +\ student["english"] + student["science"] def 평균(b): return 총점(student) / 4 def 출력(c): print(student["name"], 총점(student), 평균(student), sep="\t") students = [ 학생_생성("윤인성", 87, 98, 88, 95), 학생_생성("연하진", 92, 98, 96, 98), 학생_생성("구지연", 76, 96, 94, 90), 학생_생성("나선주", 98, 92, 96, 92), 학생_생성("윤아린", 95, 98, 98, 98), 학생_생성("윤명월", 64, 88, 92, 92) ] print("이름", "총점", "평균", sep="\t") for student in students: 출력(student) 죄송합니다 이 코드에서 def출력 함수와 def평균 함수에서 다른 함수를 불러올때 왜 매개변수를 student로 만 지정을 해야되는지 잘 모르겠습니다.
@윤인성
@윤인성 3 жыл бұрын
@@sangwoonoh7438 클래스 내부의 함수 매개변수를 student로 지정해야 하는 이유는 "함수 내부에서 student라는 이름을 쓰고 있기 때문"입니다. 만약 a로 받았다면, 함수 내부에서도 student가 아니라 a로 맞춰서 사용하시면 됩니다!
@gsmin3741
@gsmin3741 2 жыл бұрын
와우 굿. 함수가 있는데 왜 클래스를 써야하는지가 언제나 헷갈렸는데 바로 해결.
@m.g.matthewshin4210
@m.g.matthewshin4210 Жыл бұрын
4:25 student[""] 이 구문 카피하시는걸 캐치하지 못했는데 저 단어만 복붙한거 어떻게 하신건가요??
@윤인성
@윤인성 Жыл бұрын
제가 말을 하고 숨쉬려고 쉬는 부분을 편집으로 잘라버리다보니 그 잘린 부분에서 복사한 것 같습니다!
@m.g.matthewshin4210
@m.g.matthewshin4210 Жыл бұрын
@@윤인성 아하 혹시나 vscode 기능인가 싶었어요 ㅋㅋ 답변 감사합니다!
@Trapperoftrapperoftrapper
@Trapperoftrapperoftrapper Жыл бұрын
감사합니다 선생님^^
@미연정-g6g
@미연정-g6g 3 жыл бұрын
50중반에 공부하는데 정말 큰 도움이 됩니다. 감사합니다.^^
@aaronjanghyeokchoi4256
@aaronjanghyeokchoi4256 4 жыл бұрын
10:38 강의에 나타난 것 처럼 동시에 선택해서 지우는 단축키가 어떤거였죠?? 초반 강의 때 배웠었는데 까먹었습니다 ㅠ
@윤인성
@윤인성 4 жыл бұрын
Ctrl + alt + 위 아래 방향키로 여러 줄을 잡고, 지우거나 입력하시면 됩니다!
@aaronjanghyeokchoi4256
@aaronjanghyeokchoi4256 4 жыл бұрын
@@윤인성 감사합니다(__)
@조성호-y8q
@조성호-y8q 4 жыл бұрын
0:22 강아지 귀여워요 ㅋㅋㅋㅋ
@세상에공짜는없다-y5j
@세상에공짜는없다-y5j 4 жыл бұрын
주어동사목적어 너무 비유가 좋아서 이해가 쉽네요
@NoxPark
@NoxPark 2 жыл бұрын
윤저자님, 수고 많으십니다. 질문이 있습니다. class 학생: def __init__(self,name, korean, math, english, science): self.name = name self.korean = korean self.math = math self.english = english self.science = science def 총점(self): return self.korean + self.math +\ self.english + self.science def 평균(self): return self.총점() / 4 def 출력(self): print(self.name, self.총점(), self.평균(), sep = "\t") students = [ 학생("홍길동", 10, 20, 30, 40), 학생("김철수", 15, 25, 35, 45), 학생("이영희", 26, 37, 48, 59), 학생("박정수", 31, 42, 53, 64), ] print("이름", "총점", "평균", sep="\t") for student in students: 1번옵션 출력(student)
@윤인성
@윤인성 2 жыл бұрын
def 출력(student): 형태로 만들면 출력(student)를 할 수 있고 class 학생: def 출력(self): 형태로 만들면 student.출력()을 사용할 수 있습니다. 실행 결과는 똑같고 사용하는 코드 형태가 바뀔 뿐입니다. 다만 이렇게 코드 형태가 바뀌는 것이 이념적으로 큰 의미를 갖기 때문에, 현대 프로그래밍 언어는 이처럼 student.출력()을 더 선호합니다! . PS. 파이썬은 객체 지향 프로그래밍 이념과 함수 지향형 프로그래밍 이념이 싸울 때 등장한 프로그래밍 언어라서 + 두 형태가 섞여 있습니다. str(객체) 형태로 사용하는 것이 함수형 이념의 예입니다[대부분의 다른 객체 지향 프로그래밍 언어는 "객체.toString()" 형태를 사용합니다]. . 지금도 어떤 형태(이념)가 더 좋다로 싸우기는 하는데 자동 완성 기능이 활성화된 현대에는 "학생."으로 쩜을 찍었을 때 "학생으로 할 수 있는 것"을 쭉 보여줄 수 있기에 이 형태를 더 선호하는 편입니다.
@----I
@----I 3 жыл бұрын
교재 373쪽 object_2_dict.py에서 score_sum = student ["korean"]을 쓰셨는데 저 "Korean"이 student[1]같은 역할을 한건가요?
@윤인성
@윤인성 3 жыл бұрын
student가 딕셔너리이므로 "korean"을 키로 뽑는 것입니다!
@----I
@----I 3 жыл бұрын
@@윤인성 아 위에서 딕셔너리가 된건가요?
@윤인성
@윤인성 3 жыл бұрын
@@----I 지금 어떤 부분에서 의문이 드신 것인지 잘 모르겠는데, "어떤 코드로 어떤 실행을 예상했는데, 어떤 것이 실행 있어서 이상하다"를 조금 더 자세하게 설명해주실 수 있을까요?
@----I
@----I 3 жыл бұрын
@@윤인성 아 이제 알겠어요 정말 감사합니다
@다락공방-c4m
@다락공방-c4m 3 жыл бұрын
고생하셨습니다. 클래스가 여전히 감이 잡히지가 않긴 하지만 직접 쓰다보면 이해가 되겠지요. ㅠ.ㅠ
@스캇-n5j
@스캇-n5j 5 жыл бұрын
이해하기 쉽게 강의해주시네요~^^
@jasonhannn3459
@jasonhannn3459 3 жыл бұрын
점점 더 잘생겨지시네
@sangwoonoh7438
@sangwoonoh7438 3 жыл бұрын
실행 되는 순서가 이렇게 되는게 맞나요? 2) class Student: def __init__(self, name, korean, math, english, science): self.name = name self.korean = korean self.math = math self.english = english self.science = science 5) def get_sum(self): return self.korean + self.math +\ self.english + self.science 6) def get_average(self): return self.get_sum() / 4 4) def to_string(self): return "{0}\t{1}\t{2}".format(\ self.name,\ self.get_sum(),\ self.get_average()) 1) students = [ Student("윤인성", 87, 98, 88, 95), Student("연하진", 92, 98, 96, 98), Student("구지연", 76, 96, 94, 90), Student("나선주", 98, 92, 96, 92), Student("윤아린", 95, 98, 98, 98), Student("윤명월", 64, 88, 92, 92) ] 3), 7) print("이름", "총점", "평균", sep="\t") for student in students: print(student.to_string())
@윤인성
@윤인성 3 жыл бұрын
넵 맞습니다 'ㅁ' 실행 순서가 궁금하실 때는 해당 위치에 print("1번째 위치 입니다") 등을 넣어보셔도 좋습니다.
@갈가마구
@갈가마구 2 жыл бұрын
감사합니다.
@alexo.7688
@alexo.7688 3 жыл бұрын
좋은 강의 감사합니다.
@빛나리-p9m
@빛나리-p9m 4 жыл бұрын
인성님 안녕하세요! 흐린 날씨의 금요일입니다. 어제 한번 보고 오늘 복습하는 과정에서 궁금점이 있어서 이렇게 글 남기게 됐습니다. 7:10 초쯤 class 를 작성하기 전 함수로만 총점, 평균, 출력, 학생_생성을 만든 부분에 대해서 질문이 있는데요. 학생_생성 함수를 통해 쉽게 학생리스트인 students 에 학생 데이터를 추가 할 수 있을거 같았습니다. 그래서 예를 들어 "그림자", 50, 50, 50, 50 를 추가하고자 하면 이걸 어떻게 해야 할지 모르겠어요 ㅎㅎ; 가장 마지막줄 print 윗라인에 학생_생성("그림자", 50, 50, 50, 50 ) 를 쓰면 에러 문구 없이 잘 돌아가긴 하는데 결과적으로 출력땐 '그림자'에 대해서 나오질 않습니다 ㅠ_ㅠ 1.제가 생각 했을 땐 print 윗 라인에 학생_생성 함수를 쓰면 리스트에 바로 '그림자' 씨에 대한 데이터가 들어가고 출력했을때 '그림자' 씨도 같이 나와야 할거 같은데 말이죠.. 2. 두번쨰 질문은 1번 질문의 연장선상에 있는 질문입니다. 이렇게 완성된 파일을 가지고 있을 때. 제가 학생_생성() 함수를 통해 한명만 추가하고자 한다면 어떻게 해야 하나요? 에디터를 키고 이 파일을 불러와서 학생_생성() 함수를 써주는 방법 밖에 없을까요? 예를 들면 '완성된파일.py 학생_생성("그림자", 50, 50, 50, 50)' 이렇게 터미널에 작성하면 알아서 그 파일에 써진다던가 이렇게는 안되는건지 궁금합니다. 좋은 강의 항상 감사드리고 불금 보내시길 바라며!
@윤인성
@윤인성 4 жыл бұрын
1번의 경우는 혹시 현재 어떤 코드를 쓰셨는지 올려주실 수 있을까요! 2번의 경우는 argv와 eval()이라는 함수를 조합해서 해결할 수 있습니다. 다만 eval 함수 자체가 위험한 함수라서[해킹 취약점을 많이 갖고 있어서], 코드를 직접 실행하게 만드는 형태로는 코드를 작성하는게 좋지는 않습니다! argv를 활용해서 "python ㅇㅇ.py 그림자 50 50 50 50"처럼 코드가 아닌 별도의 형태(개발자 마음대로)로 읽어서 사용하는 것이 일반적입니다!
@kanyharry5328
@kanyharry5328 3 жыл бұрын
이제까지 궁금 했었는데요 여러줄 동시 입력은 어떻게 하나요? ㅎ 10,11,12 번째 줄 student 입력하실때요
@윤인성
@윤인성 3 жыл бұрын
6강 마지막 부분에서 나오는데, Ctrl + Alt 방향키 위 아래로 잡아주시면 됩니다!! 다음 강의에서는 조금 더 자세하게 정리하니 확인해보시기 바랍니다! kzbin.info/www/bejne/aKLUe4iulLhmaa8
@kanyharry5328
@kanyharry5328 3 жыл бұрын
@@윤인성 친절한 답변 정말 감사 합니다~~~
@이채현-w8i
@이채현-w8i 5 жыл бұрын
좋은 강의 올려주셔서 감사합니다:) 질문 하나만 드려도 되나요오 여러줄 한번에 입력할 수 있는 방법이 무엇인가요??
@윤인성
@윤인성 5 жыл бұрын
이채현 6강 후반부에서 설명하게 되는데, ctrl + alt 누르시고 화살표 위 아래로 이동해서 여러 줄을 잡고 입력하시면 됩니다(위 아래에 줄이 있어야 합니다)(한 줄만 되어 있으면 위 아래로 잡히지 않습니다).
@이채현-w8i
@이채현-w8i 5 жыл бұрын
@@윤인성 아하 감사합니다!!
@이채현-w8i
@이채현-w8i 5 жыл бұрын
@@윤인성 왠진 모르겠지만 전 안되네요ㅠㅜㅠㅜㅠ그래두 감사해요
@이채현-w8i
@이채현-w8i 5 жыл бұрын
@@윤인성 아 파이참은 Ctrl 두번 누르고 방향키 써야하나봐요 발견했습니다!
@세상에공짜는없다-y5j
@세상에공짜는없다-y5j 4 жыл бұрын
@@이채현-w8i 파이참은 어떤방식인가요?
@김콩콩-b3l
@김콩콩-b3l 4 жыл бұрын
드디어 이해했어요,, 감사합니다
@qusaldk
@qusaldk 5 жыл бұрын
명쾌한 강의 감사합니다^^
@H_-vy2mz
@H_-vy2mz 4 жыл бұрын
위에 클래스 구문 똑같이 입력했는데 이런 오류가 나는데 어떡하죠 ㅠㅠ AttributeError: '학생' object has no attribute ' 출력'
@윤인성
@윤인성 4 жыл бұрын
똑같이 입력했으면 오류가 발생하지 않습니다. 들여쓰기 등에 문제가 있는 것으로 보이는데, 전체 코드를 들여쓰기가 보이는 형태로 올려주실 수 있을까요?
@콘충이
@콘충이 3 жыл бұрын
멋있습니다!
@nampolamp8236
@nampolamp8236 3 жыл бұрын
진짜 감사드려요
@cccc-g8r
@cccc-g8r Жыл бұрын
객체지향을 꼭 써야할까요? 장점이 있는지 궁금합니다..!
@윤인성
@윤인성 Жыл бұрын
"협업해서 프로그램을 개발"한다면 쓰는 것이 좋습니다. 사실 초보자 단계 or 혼자 개발하는 단계에서는 이걸 쓰는게 왜 좋은가를 알기 힘든데 다음 "내 코드가 그렇게 이상한가요?" 등의 강의를 참고해보세요. kzbin.info/www/bejne/n3K8gqmJpreamM0 추가로 "혼자 공부하는 파이썬 개정판"의 객체 지향 프로그래밍 강의를 참고해보세요! kzbin.info/www/bejne/noOXoaqBq9dmqdE
@류상서
@류상서 5 жыл бұрын
강의 감사합니다. 애쓰셨네요~~ 수고 하셨습니다. 다른질문 하나 드릴께요 어제부터 python에 아래처럼 메세지가 뜨는데 뭔지요? can you please take 2 minutes to tell us how the python language sever is working for you? 좋은 하루 되세요^^
@윤인성
@윤인성 5 жыл бұрын
아마 파이썬 쪽에서 랜덤하게 설문 조사 같은 것을 하고 있는 것 같은데 무시하셔도 될 것 같아요...!
@류상서
@류상서 5 жыл бұрын
@@윤인성 예~~ 그렇군요 감사합니다.^^
@pierreyun8287
@pierreyun8287 3 жыл бұрын
감사합니다 :) :)
@ai비서
@ai비서 4 жыл бұрын
갑자기 분위기 미소년
@aaron-kim00
@aaron-kim00 3 жыл бұрын
감사합니다
@지나가던행인-n7x
@지나가던행인-n7x 4 жыл бұрын
선생님이랑 완전히 똑같이 작성했는데 왜 저는 오류가 뜨는걸까요. 아니, 완전히 똑같이 작성했는데 오류가 나올수가 있나...
@윤인성
@윤인성 4 жыл бұрын
어떤 부분이 다르게 적힌 것입니다. 오류의 내용을 확인해주세요.
@EscapeSleep1
@EscapeSleep1 2 жыл бұрын
여러줄에 한번에 입력하는건 어떻게 하는건가요?
@윤인성
@윤인성 2 жыл бұрын
6강 마지막 부분에서 다루었는데 Ctrl + Alt + 화살표 위 또는 아래로 여러 줄을 잡고 입력하시면 됩니다!
@mg0011
@mg0011 Жыл бұрын
4:28 경에 동시에 str쓰시는건 어떻게 하나요???
@윤인성
@윤인성 Жыл бұрын
"ctrl + alt + 방향키위아래"로 여러 줄을 선택하시면, 한꺼번에 입력 또는 제거 할 수 있습니다! 참고로 현재 이 강의는 개정판 강의가 있는데 2배 정도 더 길고 자세하게 녹화해서 그쪽 참고하시는걸 추천드립니다! 특히 클래스 쪽은요!!
@ssle2670
@ssle2670 5 жыл бұрын
학생.출력() A.B() A는 뭐고 B는 뭔가요? 함수의 형태인가요? 이 구문이 뭔지 모르겠습니다..
@윤인성
@윤인성 5 жыл бұрын
A는 객체이며, 객체가 갖고 있는 함수(메서드)가 B입니다 'ㅁ' ...!
@김민경-y7d
@김민경-y7d 3 жыл бұрын
6:51 처럼 여러 줄 선택하는거 어떻게 하나요...?
@윤인성
@윤인성 3 жыл бұрын
6강 마지막 부분에 다루었는데, Ctrl + Alt + 방향키 위아래로 여러 줄 잡고 입력해주시면 됩니다!
@adacardano10
@adacardano10 4 жыл бұрын
11:00 쯤에 test-1.py 가 아닌 test.py가 출력되었네요!!
@윤인성
@윤인성 4 жыл бұрын
앗 사소한 부분 잡아주셔서 감사합니다 @_@
@김건호-t2b
@김건호-t2b 3 жыл бұрын
안녕하세요 강의 잘 보고 있습니다. 질문 있습니다. 혼자 코드를 쳐보며 연습하던 중에 def create_student(name, korean, math, science) : return { name : "name", korean : "korean", math :"math", science : "science" } students = [ create_student("윤인성", 87, 98, 88), create_student("연하진", 92, 98, 96), create_student("구지연", 76, 96, 34) ] print("이름", "총점", "평균", sep="\t") for student in students : score_sum = student["korean"] + student["math"] + student["science"] score_average = score_sum / 3 print( student["name"], score_sum, score_average, sep = "\t") 이런 코드를 작성했는데 자꾸 keyerror가 생깁니다 ㅠ 어디서 잘못된건지 알려주실수 있으신가요!
@윤인성
@윤인성 3 жыл бұрын
name : "name", korean : "korean", math :"math", science : "science" 여기 요소들의 따옴표가 왼쪽 아이들에 붙어야 합니다!
@jcmoon555
@jcmoon555 4 жыл бұрын
쓰고 계신 프로그램 이름이 뭐죠?
@윤인성
@윤인성 4 жыл бұрын
에디터를 말씀하시는 것인가요? 아니면 동영상 편집 프로그램을 말하시는 것인가요? 조금 더 명확하게 알려주실 수 있을까요...! 에디터의 경우는 처음 보신다면 1강부터 차근차근 보시는 것을 추천드립니다.
@lifeispain2
@lifeispain2 4 жыл бұрын
클래스는 굉장히 어렵네요
@윤인성
@윤인성 4 жыл бұрын
클래스 쪽은 초반에 어떻게 사용해야할지 모르겠는 경우가 많아서, 일단 눈도장만 찍어두시고 이후에 다음 단계들을 진행하면서 "그게 그거였구나"라고 이해해보시는걸 추천드립니다!
@김삐삐-c1b
@김삐삐-c1b 3 жыл бұрын
감사합니다♡
혼자 공부하는 파이썬 46강 - 기본 클래스 선언
9:13
Миллионер | 2 - серия
16:04
Million Show
Рет қаралды 1,6 МЛН
Não sabe esconder Comida
00:20
DUDU e CAROL
Рет қаралды 36 МЛН
Life hack 😂 Watermelon magic box! #shorts by Leisi Crazy
00:17
Leisi Crazy
Рет қаралды 80 МЛН
Pgday Seoul 2024
4:09:24
주간파이썬
Рет қаралды 278
혼자 공부하는 파이썬 33강 - 매개변수 정리
6:36
파이썬 함수 def 문법 개쉽게 10분만에 총정리
9:51
코딩애플
Рет қаралды 79 М.
Миллионер | 2 - серия
16:04
Million Show
Рет қаралды 1,6 МЛН