강의영상

- (1/3) 이미지자료 불러오기 (PIL 이용)

- (2/3) 클래스의 성능 정리

- (3/3) 연습문제

imports

import requests
from PIL import Image 

- 예제1

url= 'https://stat.jbnu.ac.kr/sites/stat/images/intro_about_02.jpg'
Image.open(Image.io.BytesIO(requests.get(url).content))
  • 우리학과 실습실!

- 예제2

url1 = 'https://github.com/guebin/IP2022/blob/master/_notebooks/2022-05-07-stop1.jpeg?raw=true'
url2 = 'https://github.com/guebin/IP2022/blob/master/_notebooks/2022-05-07-stop2.png?raw=true' 
Image.open(Image.io.BytesIO(requests.get(url1).content))
Image.open(Image.io.BytesIO(requests.get(url2).content))

클래스공부 1단계

클래스 선언 및 사용예시

- 클래스를 선언

class STOOOP: 
    title = '학교폭력!' 
    url = url1
    end = '멈춰~~~~'
    def stop(self):
        print(self.title)
        display(Image.open(Image.io.BytesIO(requests.get(self.url).content)))
        print(self.end) 
  • 규칙1: 메소드(=class안에서 정의된 함수)의 첫번째 인자는 무조건 self
  • 규칙2: 메소드에서 class안에 정의된 변수들(title, url, end)을 사용하려면 "self.변수이름"와 같은 형식으로 쓴다.
    • 즉 "self.title", "self.url", "self.end" 와 같은 방식으로 써야한다.
  • 참고: 규칙2에서 가끔 self의 자리에 "STOOOP.title","STOOOP.url","STOOOP.end" 와 같이 클래스의 이름으로 쓰기도 한다.

- 클래스 사용예시

(예시1) STOOOP 클래스 -> school 인스턴스 만듬

school = STOOOP()
school.stop()
학교폭력!
멈춰~~~~

(예시2) STOOOP 클래스 -> kospi 인스턴스 만듬

kospi = STOOOP()
kospi.title = 'KOSPI 하락'
kospi.stop()
KOSPI 하락
멈춰~~~~

클래스의 기본성능 정리

- 성능1: 틀만있으면 여러개의 독립적인 컨텐츠를 생성할 수 있다

school = STOOOP()
kospi = STOOOP()
  • 함수의 사용법과 비슷하다.
  • 클래스이름을 쓰고 콘텐츠를 구체화하는 과정에서 필요한 입력1, 입력2를 ()에 넣는다. 이때는 STOOOP(입력1,입력2)와 같이 생성
  • 위의 예시는 따로 입력이 없으므로 비워둔 상태임. 즉 STOOOP()와 같은 식으로 생성.

- 성능2: 생성된 콘텐츠(=인스턴스)에서 .을 찍고 접근할 수 있는 여러 자료들에 접근가능하며 내용도 독립적으로 바꿀 수 있다.

school.title # 출력
'학교폭력!'
kospi.title # 출력
'학교폭력!'
kospi.title = '코스피하락' # 변경

- 성능3: 생성된 콘텐츠(=인스턴스)에서 .을 찍고 쓸 수 있는 자체적인 함수(=method라고 함)를 독립적으로 사용할 수 있다.

school.stop()
학교폭력!
멈춰~~~~
kospi.stop()
코스피하락
멈춰~~~~

연습문제

문제1: 아래의 클래스를 구현하라.

- 클래스내에는 변수 a가 있다. 변수 a의 초기값은 True이다.

- 클래스에는 show()라는 메소드가 있다. show()의 기능은 a의 값을 print하는 기능을 한다.

(풀이)

class Klass1: 
    a = True 
    def show(self):
        print(self.a)
ex1 = Klass1()
ex1.a
True
ex1.show()
True

문제2: 아래의 클래스를 구현하라.

- 클래스내에는 변수 a가 있다. 변수 a의 초기값은 1이다.

- 클래스에는 up()라는 메소드가 있다. up()의 기능은 a의 값을 1증가시키는 기능을 한다.

(풀이)

class Klass2: 
    a = 1 
    def up(self):
        self.a = self.a + 1 
ex2 = Klass2()
ex2.a
1
ex2.up()
ex2.a
2
ex2.up()
ex2.up()
ex2.up()
ex2.a
5

문제3: 아래의 클래스를 구현하라.

- 클래스내에는 변수 a가 있다. 변수 a의 초기값은 0이다.

- 클래스에는 up(),down(),show()라는 메소드가 있다. 각각은 a의 값을 1증가, a의 값을 1감소, a의 값을 print하는 기능을 한다.

(풀이)

class Klass3: 
    a = 0 
    def up(self):
        self.a = self.a + 1 
    def down(self):
        self.a = self.a - 1 
    def show(self):
        print(self.a)
ex3=Klass3()
ex3.show()
0
ex3.up()
ex3.show()
1
ex3.up()
ex3.up()
ex3.show()
3
ex3.up()
ex3.down()
ex3.show()
3
ex3.down()
ex3.down()
ex3.show()
1

문제4: 아래의 클래스를 구현하라.

- 클래스내에는 변수 url이 있음. url의 초기값은 https://github.com/guebin/IP2022/blob/master/_notebooks/2022-05-07-stop1.jpeg?raw=true이다.

- 클래스에는 show()이라는 메소드를 가지는데, 메소드는 아래와 같은 기능을 한다.

  • 기능1: url의 그림을 출력
  • 기능2: '당신은 이 그림을 $n$번 보았습니다' 출력. 여기에서 $n$은 그림을 본 횟수

(풀이)

class Klass4:
    n = 1
    url = 'https://github.com/guebin/IP2022/blob/master/_notebooks/2022-05-07-stop1.jpeg?raw=true'
    def show(self):
        display(Image.open(Image.io.BytesIO(requests.get(self.url).content)))
        print("당신은 이 이미지를 {}번 보았습니다".format(self.n))
        self.n = self.n+1 
a=Klass4()
a.show()
당신은 이 이미지를 2번 보았습니다
b=Klass4()
b.url = url2
b.show()
당신은 이 이미지를 3번 보았습니다

숙제

- 클래스를 선언하라. ["가위","바위","보"]중 하나를 골라서 내는 메소드를 정의하라.

hint

import numpy as np
np.random.choice(["가위","바위","보"])
'바위'