파이썬 (0511) 11주차

클래스
Author

김보람

Published

May 11, 2022

!pip install pillow
Collecting pillow
  Downloading Pillow-9.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl (3.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 57.2 MB/s eta 0:00:00a 0:00:01
Installing collected packages: pillow
Successfully installed pillow-9.4.0
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 instance를 만드는 과정

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 = '코스피하락' #변경
kospi.title
'코스피하락'

- 성능3: 클래스에서 만들어진 인스턴스는 그 내부에 자체적인 함수를 가지는데, 이것을 사용할 수 있다.

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

kospi.stop()
코스피하락
멈춰~~~~

연습문제

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

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

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

(풀이)

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

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

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

- 클래스에는 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.up()
ex2.a
6

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

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

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

(풀이)

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.down()
ex3.show()
0

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

- 클래스내에는 변수 url이 있고, 초기값은 url1이다.

url1:’https://github.com/guebin/IP2022/blob/master/_notebooks/2022-05-07-stop1.jpeg?raw=true’

- 클래스에는 show()라는 메소드를 가지는데, 아래와 같은 기능을 한다. - 기능1: url의 그림을 출력 - 기능2: ‘당신은 이 그림을 \(n\)번 보았습니다.’ 출력.\(n\)은 그림을 본 횟수

url1
'https://github.com/guebin/IP2022/blob/master/_notebooks/2022-05-07-stop1.jpeg?raw=true'

(풀이)

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()

당신은 이 이미지를 3번 보았습니다
b=Klass4()
b.url=url2
b.show() # a와 독립적으로..

당신은 이 이미지를 2번 보았습니다

숙제

import numpy as np
np.random.choice(["가위","바위","보"])
'보'
class homework:
    def show(self):
        self.work=np.random.choice(["가위","바위","보"])
        print(self.work)
work = homework()
work.show()
가위