12wk-1: 클래스공부 2단계 – __init__

Author

최규빈

Published

May 22, 2023

import

from IPython.core.display import HTML

클래스공부 1단계: 메소드 (복습)

class JungKKuckMa:
    def show(self):
        _str = self.html_str.format(
            ttl = self.title,
            url = self.imgurl,
            Q = self.ques,
            A = self.ans,
            hl = self.highlight
        )
        display(HTML(_str)) 
pp2023 = JungKKuckMa()
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()

파이썬 프로그래밍 중간고사 패배는 괜찮다.

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

클래스공부 2단계: __init__

모티브

- 모티브: 태어날때마다 변수들 (pp2023.title, pp2023.ans, …) 을 선언하는게 귀찮다.

트릭1

- 아래의 코드까지는 동일

class JungKKuckMa:
    def show(self):
        _str = self.html_str.format(
            ttl = self.title,
            url = self.imgurl,
            Q = self.ques,
            A = self.ans,
            hl = self.highlight
        )
        display(HTML(_str)) 
pp2023 = JungKKuckMa()

(참고) 이 시점에서 pp2023. + tab을 누르면 show 가 자동완성 된다.

- init을 선언하자.

def init(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>
    '''

현재 변수,함수,클래스의 상황은 아래와 같다. (참고로 변수,함수,클래스를 모두 뭉뚱그려서 오브젝트라고 표현할 수도 있음)

- JungKKuckMa 
- pp2023 
    - pp2023.show
- init 

- init을 실행

init(pp2023)

*(참고) 이제 pp2023. + tab 을 누르게 되면 아래와 같이 보인다.

현재 오브젝트들의 상황은 아래와 같다.

- JungKKuckMa 
- pp2023 
    - pp2023.show
    - pp2023.ans
    - pp2023.highlight
    - pp2023.html_str
    - pp2023.imgurl
    - pp2023.ques 
    - pp2023.title
- init 
pp2023.show()

파이썬 프로그래밍 중간고사 패배는 괜찮다.

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

트릭2

- 외부에 선언된 init을 클래스 내부로 넣어서 선언. (외부에 선언된 함수를 클래스 내부의 메소드로 선언)

class JungKKuckMa:
    def init(self):
        self.title = '파이썬 프로그래밍 중간고사 패배는 괜찮다.'
        self.imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true?'
        self.ques = "Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?"
        self.ans = "A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요."
        self.highlight = '마음'
        self.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(self):
        _str = self.html_str.format(
            ttl = self.title,
            url = self.imgurl,
            Q = self.ques,
            A = self.ans,
            hl = self.highlight
        )
        display(HTML(_str)) 

- 클래스로 부터 인스턴스 생성

pp2023 = JungKKuckMa()

(참고) 이 시점에서 pp2023. + tab 을 입력하면 아래와 같이 보인다.

- init 실행

pp2023.init()

(참고) 이 시점에서 pp2023. + tab 을 입력하면 아래와 같이 보인다.

- show 실행

pp2023.show()

파이썬 프로그래밍 중간고사 패배는 괜찮다.

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

트릭2의 사용

t=1 – 밈1: 파이썬 프로그래밍 중간고사

pp2023 = JungKKuckMa()

(참고) 이 시점에서 pp2023. + tab 을 누르면?

pp2023.init()

(참고) 이 시점에서 pp2023. + tab을 누르면?

pp2023.show()

파이썬 프로그래밍 중간고사 패배는 괜찮다.

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

t=2 – 밈2: 버거킹

burger = JungKKuckMa() 
burger.init()
burger.title = '버거 2개를 골라도 6000원!' 
burger.imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/burgerking.png?raw=true'
burger.ques = '기간: 11월28일(월)~12.4(일)'
burger.ans = '콰트로치즈 와퍼 주니어, 통새우 와퍼 주니어, 롱치킨 버거 최대 42% 할인!'
burger.highlight = '할인'
burger.show()

버거 2개를 골라도 6000원!

기간: 11월28일(월)~12.4(일)

콰트로치즈 와퍼 주니어, 통새우 와퍼 주니어, 롱치킨 버거 최대 42% 할인!

중요한 것은 꺾이지 않는 할인

t=3 – 밈1변경: 중요한 것은 꺾이지 않는 “집중력”

pp2023.highlight = '집중력' 
pp2023.show()

파이썬 프로그래밍 중간고사 패배는 괜찮다.

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 집중력

t=4 – 밈2변경: 버거 종류 수정 + 할인뒤에 느낌표 2개 추가

burger.ans = '기네스콰트로치즈와퍼, 기네스와퍼, 몬스터와퍼, 몬스터X 최대 ??% 할인!'
burger.highlight = '할인!!'
burger.show()

버거 2개를 골라도 6000원!

기간: 11월28일(월)~12.4(일)

기네스콰트로치즈와퍼, 기네스와퍼, 몬스터와퍼, 몬스터X 최대 ??% 할인!

중요한 것은 꺾이지 않는 할인!!

__init__()

- 모티브: 생각해보니까 트릭2는 (1) 인스턴스를 만든 뒤 (2) pp2023.init() 를 수행하는 것이 고정임!

세트실행의 예시

burger = JungKKuckMa() 
burger.init()

- 하고 싶은 것: 인스턴스를 만드는 시점에서 자동으로 init()이 실행되도록 하고 싶다.

class JungKKuckMa:
    def __init__(self):
        self.title = '파이썬 프로그래밍 중간고사 패배는 괜찮다.'
        self.imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true?'
        self.ques = "Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?"
        self.ans = "A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요."
        self.highlight = '마음'
        self.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(self):
        _str = self.html_str.format(
            ttl = self.title,
            url = self.imgurl,
            Q = self.ques,
            A = self.ans,
            hl = self.highlight
        )
        display(HTML(_str)) 

- 사용예시

pp2023 = JungKKuckMa()

(참고) 이 시점에서 pp2023. + tab을 하면? 예상: __init__show가 보일것이다?

실제로는 위와 같이 보임

  • 변수들이 미리 선언되어 있음.
  • 함수 __init__ 은 안보임 (숨어있음)

(참고) 숨은 __init__을 강제소환

::: {#ee823856-d0aa-48e2-8a84-c9bc157389f4 .cell execution_count=38}

pp2023.__init__??

::: {.cell-output .cell-output-display}

::: {.ansi-escaped-output}

```{=html}

Signature: pp2023.init() Docstring: Initialize self. See help(type(self)) for accurate signature. Source:
def init(self): self.title = ‘파이썬 프로그래밍 중간고사 패배는 괜찮다.’ self.imgurl = ‘https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true?’ self.ques = “Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?” self.ans = “A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 내가 내 코드를 잘 구현하는 게 제일 중요한 것 같고 중간고사는 망하긴 했지만 제 스스로 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.” self.highlight = ‘마음’ self.html_str =
’’’ <style> .title