from IPython.core.display import HTML
11wk-2: 클래스공부 1단계 – 메소드
강의영상
youtube: https://youtube.com/playlist?list=PLQqh36zP38-z1m0pVpgKBGMvyvcxcInHv
imports
지난시간 사용한 코드
class JungKKuckMa:
pass
= JungKKuckMa() pp2023
= '파이썬 프로그래밍 중간고사 패배는 괜찮다.'
pp2023.title = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true?'
pp2023.imgurl = "Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?"
pp2023.ques = "A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요."
pp2023.ans = '마음'
pp2023.highlight =\
pp2023.html_str '''
<style>
.title {{
font-family: "Times New Roman", serif;
font-size: 30px;
font-weight: 900;
}}
.text {{
font-family: "Arial", sans-serif;
font-size: 20px;
font-style: italic;
}}
.highlight {{
font-family: "Montserrat", monospace;
font-size: 35px;
font-weight: 900;
text-decoration: underline;
font-style: normal;
color: darkblue;
background-color: #FFFF00;
}}
</style>
<p class="title">{ttl}</p>
<img src={url} width="600">
<p> \n </p>
<p class="text">{Q}</p>
<p class="text">{A}</p>
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">{hl}</span></p>
'''
def show(pp2023):
= pp2023.html_str.format(
_str = pp2023.title,
ttl = pp2023.imgurl,
url = pp2023.ques,
Q = pp2023.ans,
A = pp2023.highlight
hl
) display(HTML(_str))
show(pp2023)
파이썬 프로그래밍 중간고사 패배는 괜찮다.
Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?
A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.
중요한 것은 꺾이지 않는 마음
클래스공부 1단계: 메소드
메소드 (\(\star\))
-
직관:
- show라는 함수는
pp2023
,burger
외부에 독립적으로 존재하는 함수. - show라는 함수를 과 같이
pp2023.title
과pp2023
혹은burger
안에 종속시키고 싶다.
어차피 show는 pp2023, burger와 같이 JungKKuckMa의 인스턴스를 입력으로 받을 예정이므로 pp2023과 burger와 관련이 있다. 그래서 같이 묶는게 깔끔하다는 생각이 든다.
-
시도1: 결국 pp2023.show
와 같은 것을 만들고 싶은것이므로 pp2023.title
을 설정하듯이 해보자. \(\to\) 실패
class JungKKuckMa:
pass
= JungKKuckMa() pp2023
= '파이썬 프로그래밍 중간고사 패배는 괜찮다.'
pp2023.title = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true?'
pp2023.imgurl = "Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?"
pp2023.ques = "A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요."
pp2023.ans = '마음'
pp2023.highlight =\
pp2023.html_str '''
<style>
.title {{
font-family: "Times New Roman", serif;
font-size: 30px;
font-weight: 900;
}}
.text {{
font-family: "Arial", sans-serif;
font-size: 20px;
font-style: italic;
}}
.highlight {{
font-family: "Montserrat", monospace;
font-size: 35px;
font-weight: 900;
text-decoration: underline;
font-style: normal;
color: darkblue;
background-color: #FFFF00;
}}
</style>
<p class="title">{ttl}</p>
<img src={url} width="600">
<p> \n </p>
<p class="text">{Q}</p>
<p class="text">{A}</p>
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">{hl}</span></p>
'''
# 원래코드
# def show(pp2023):
# _str = pp2023.html_str.format(
# ttl = pp2023.title,
# url = pp2023.imgurl,
# Q = pp2023.ques,
# A = pp2023.ans,
# hl = pp2023.highlight
# )
# display(HTML(_str))
# 수정한코드
def pp2023.show(pp2023):
= pp2023.html_str.format(
_str = pp2023.title,
ttl = pp2023.imgurl,
url = pp2023.ques,
Q = pp2023.ans,
A = pp2023.highlight
hl
) display(HTML(_str))
SyntaxError: invalid syntax (<ipython-input-12-7e81d9b4ed5c>, line 12)
실패했다..
-
시도2: 성공
class JungKKuckMa:
def show(self):
= self.html_str.format(
_str = self.title,
ttl = self.imgurl,
url = self.ques,
Q = self.ans,
A = self.highlight
hl
)
display(HTML(_str))# show함수를 그대로 넣고 pp2023을 self로 바꿈
= JungKKuckMa() pp2023
(참고) 이 시점에 pp2023.
+ tab을 누르면 show 함수가 자동완성 된다.
= '파이썬 프로그래밍 중간고사 패배는 괜찮다.'
pp2023.title = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true?'
pp2023.imgurl = "Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?"
pp2023.ques = "A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요."
pp2023.ans = '마음'
pp2023.highlight =\
pp2023.html_str '''
<style>
.title {{
font-family: "Times New Roman", serif;
font-size: 30px;
font-weight: 900;
}}
.text {{
font-family: "Arial", sans-serif;
font-size: 20px;
font-style: italic;
}}
.highlight {{
font-family: "Montserrat", monospace;
font-size: 35px;
font-weight: 900;
text-decoration: underline;
font-style: normal;
color: darkblue;
background-color: #FFFF00;
}}
</style>
<p class="title">{ttl}</p>
<img src={url} width="600">
<p> \n </p>
<p class="text">{Q}</p>
<p class="text">{A}</p>
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">{hl}</span></p>
'''
(참고) 이 시점에서 pp2023.
+ tab 을 하면 아래와 같이 보인다. (pp2023 내부에는 ans,highlight, html_str 등과 함께 show도 포함되어있음)
pp2023.show()
# pp2023.show의 입력을 생략해도, pp2023 자체는 자동으로 입력대상으로 고려
파이썬 프로그래밍 중간고사 패배는 괜찮다.
Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?
A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.
중요한 것은 꺾이지 않는 마음
-
암기
- 선언하는 방법: 외부에 선언한 show의 코드를 그대로 복붙하여 Class안으로 가져온다. \(\to\) pp2023이라고 되었던 부분을 모두 self로 바꾼다!
- 사용하는 방법: pp2023의 내부에 소속된 함수 (ex: pp2023.show) 를 사용할때는, 함수의 사용에 pp2023의 정보를 쓰더라도 (ex: pp2023.title 등), 입력으로 pp2023을 생략한다.
self의 의미 (\(\star\))
-
아래의 코드를 다시 관찰하자.
class JungKKuckMa:
def show(self):
= self.html_str.format(
_str = self.title,
ttl = self.imgurl,
url = self.ques,
Q = self.ans,
A = self.highlight
hl
)
display(HTML(_str))# show함수를 그대로 넣고 pp2023을 self로 바꿈
= JungKKuckMa() pp2023
-
관찰
self
는pp2023
혹은burger
에 대응한다.- 즉
self
는JungKKuckMa
클래스에서 생성할 인스턴스의 이름에 대응한다. - 비유하면
self
는JungKKuckMa
에서 태어날 아기의 이름을 대신한다.
-
우리가 하고 싶은 것: 클래스가 설계되는 시점에서, 클래스가 설계완료되고 그 후에 태어날 인스턴스의 이름을 이용해 show 함수의 동작을 define 하는 것
-
즉 아래의 코드에서
def show(self):
= self.html_str.format(
_str = self.title,
ttl = self.imgurl,
url = self.ques,
Q = self.ans,
A = self.highlight
hl
) display(HTML(_str))
def show 이후에 서술된 모든 내용은 시점상 ???? = JungKKuckMa()
가 선언된 이후의 행동을 “미리” 정의하는 코드이며, 이때 self
는 ????
의 자리를 대신한다.
-
self의 의미: ???? = JungKKuckMa()
에 의해서 의하여 태어날 인스턴스 “태명”
- 우리는 클래스가 설계되는 시점에서 인스턴스가 태어난 이후에 하게 될 일련의 동작을 정의하고 싶음.
- 그런데 클래스가 설계하는 시점에서는 인스턴스의 이름이 정해지지 않았으므로 (아직 태어나지도 않음) 1번의 작업이 불편하다.
- 그래서 앞으로는 1번의 작업이 원활하게 진행되도록, 앞으로 태어날 인스턴스의 이름은 모두 self라는 가칭으로 부른다.
-
시점이 꼬일시 발생하는 오류
class JungKKuckMa:
def show(self):
= self.html_str.format(
_str = self.title,
ttl = self.imgurl,
url = self.ques,
Q = self.ans,
A = self.highlight
hl
) display(HTML(_str))
= JungKKuckMa() pp2023
= '파이썬 프로그래밍 중간고사 패배는 괜찮다.'
pp2023.title # pp2023.imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true?'
# pp2023.ques = "Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?"
# pp2023.ans = "A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요."
# pp2023.highlight = '마음'
=\
pp2023.html_str '''
<style>
.title {{
font-family: "Times New Roman", serif;
font-size: 30px;
font-weight: 900;
}}
.text {{
font-family: "Arial", sans-serif;
font-size: 20px;
font-style: italic;
}}
.highlight {{
font-family: "Montserrat", monospace;
font-size: 35px;
font-weight: 900;
text-decoration: underline;
font-style: normal;
color: darkblue;
background-color: #FFFF00;
}}
</style>
<p class="title">{ttl}</p>
<img src={url} width="600">
<p> \n </p>
<p class="text">{Q}</p>
<p class="text">{A}</p>
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">{hl}</span></p>
'''
pp2023.show()
AttributeError: 'JungKKuckMa' object has no attribute 'imgurl'
숙제
없습니당