(11주차) 5월11일
클래스 공부 1단계
-
(1/3) 이미지자료 불러오기 (PIL 이용)
-
(2/3) 클래스의 성능 정리
-
(3/3) 연습문제
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))
-
클래스를 선언
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()
-
성능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
ex1.show()
문제2: 아래의 클래스를 구현하라.
-
클래스내에는 변수 a가 있다. 변수 a의 초기값은 1이다.
-
클래스에는 up()라는 메소드가 있다. up()의 기능은 a의 값을 1증가시키는 기능을 한다.
(풀이)
class Klass2:
a = 1
def up(self):
self.a = self.a + 1
ex2 = Klass2()
ex2.a
ex2.up()
ex2.a
ex2.up()
ex2.up()
ex2.up()
ex2.a
문제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()
ex3.up()
ex3.show()
ex3.up()
ex3.up()
ex3.show()
ex3.up()
ex3.down()
ex3.show()
ex3.down()
ex3.down()
ex3.show()
문제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()
b=Klass4()
b.url = url2
b.show()
-
클래스를 선언하라. ["가위","바위","보"]중 하나를 골라서 내는 메소드를 정의하라.
hint
import numpy as np
np.random.choice(["가위","바위","보"])