본문 바로가기

코딩/파이썬 혼공단

♥혼공파 파이썬 대망의 6주차 기본미션과 선택미션 공부하기♥

 

6주차~~ 벌써 6주차라니~~!!

혼공파에 선정되어서 좋았던 그 기분을 다시금 생각하며 6주차 공부를 시작해 보자~!!! 

 

 

07-2 외부 모듈

모듈 설치하기

외부모듈은 Window+R키를 눌러 프로그램 실행창을 띄우고 [cmd]를 입력하면 나타나는 명령 프롬프트 창에서 실행해야 합니다.

pip install    모듈 이름

 

pip install Beautiful Soup

 

이렇게 적었는데 오류가 뜬다...ㅠㅠ 그래서 인터넷에 오류에관해서 찾아보니  저렇게 뜨는건 

python 3.12.1에 맞는 TensorFlow 2가 없었기 때문에 오류가 떴던거였다.

 

1. 오류:

 

2. 원인및 해결

python 3.12.1에 맞는 TensorFlow 2가 없었기 때문에 오류가 발생했다. 

3.12.1보다 낮은거로 해주면 좋다해서 3.10.3으로 깔고 다시해줬더니 실행이 되었다~!!

진짜...ㅠㅠ  7단원시작부터 실행이 안되서 처음에 엄청 멘붕이였는데 다행히 실행되서 정말 다행이었다.!!

이세상엔 진짜 친절하신분이 정말 많은것같다. 좋은세상이야~~

 

 

윈도우용 설치파일 선택하여 다운로드 하기.

 

여기에 둘다 체크하라고 되어있는데 내꺼에는 왜  Install launcher for all users (recommended) 는 체크가 안되는걸까???ㅠㅠ  recommended라고 중요한것같은데...일단 저거 말고 밑에것만 선택해서 설치했는데 괜찮은거겠지...???

 

 

근데 저기에 warning 이라고 써있으면서 새로운버전으로 업데이트하라는것같은데.... 해야되는건가 고민된다..

우선 업데이트 안해도 실행은되서 그대로 두긴했다.

 

모듈설치부터 막혔어서 걱정이였는데 다행히 해결되서~~~ㅎㅎㅎㅎ 다음단계로 넘어갈 수 있어서 정말 다행이였다.

 

도움자료:

파이썬 & 텐서플로 설치 for “모두를 위한.. : 네이버블로그 (naver.com) 

이와같이 비슷한 오류가 나신 혼공분들이 계실수도 있을것같아 제가 찾아보고 도움받았던 블로그 공유해 드려요!!

하나하나 친절하게 잘 설명해 놓으셔서 해결하는데 도움이 많이 되실꺼예요~!!!  

 

pip 파이썬 패키지 관리 시스템으로 정말 많은 기능을 가지고 있습니다. 특정 버전의 모듈을 설치하거나 설치한 모듈을 제거하는 기능 등을 모두 지원합니다.

 

모듈 찾아보기

방금 설치한 Beautiful Soup 모듈은 웹 페이지를 분석할 때 사용하는 모듈입니다.

 

 

방법 1 : 책에서 추천해준 모듈

방법 2 : 파이썬 커뮤니티에서 알게된 모듈

방법 3 : 구글 검색

무언가를 개발하면서 필요한 모듈들은 구글에서 검색하는 것이 좋습니다.

'python'이라는 키워드 옆에 '내가 원하는 것'을 더해서 검색하면 관련된 모듈과 그 모듈의 설명이 나옵니다.

 

Beautiful Soup 모듈

Beautiful Soup(뷰티풀 수프)는 굉장히 유명한 파이썬의 웹 페이지 분석 모듈입니다.

 

Beautiful Soup 홈페이지

URL https://www.crummy.com/software/BeautifulSoup/bs4/doc

 

Beautiful Soup Documentation — Beautiful Soup 4.12.0 documentation

Beautiful Soup Documentation Beautiful Soup is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers h

www.crummy.com

 

Beautiful Soup를 사용해서 기상청의 날씨정보를 가져와 출력해 보겠습니다.

 

기상청 전국 날씨 정보(RSS 서비스)

URL http://www.weather.go.kr/w/pop/rss-guide.do 

 

 

RSS주소로 XML 형식의 날씨 데이터를 가져옵니다.

bs4 모듈의 Beautiful Soup( )함수의 매개변수로 HTML 문자열과 "html.parser"라는 문자열을 넣으면 Beautiful Soup이라는 특수한 객체를 리턴합니다.

 

직접 해보는 손코딩

Beautiful Soup 모듈로 날씨 가져오기

 

실행 결과:

 

원래 파이썬에서는 알파벳 대문자를 사용하지 않았는데, 이번 예제에서는 Beautiful Soup에 대문자를 사용했습니다.

이것이 만약 함수라면 'beautiful soup'이라는 단어를 합쳐서 beautiful_soup()이라는 형태로 사용했을 것입니다. 그런데 각 단어의 앞글자를 대문자로 만들고 이를 합쳐서 BeautifulSoup()과 같은 형태로 사용했습니다.

그 이유는 BeautifulSoup()이 단순한 함수가 아니라 클래스의 생성자이기 때문입니다.

 

Flask 모듈

URL   http://flask.pocoo.org

 

Welcome to Flask — Flask Documentation (3.0.x)

 

flask.palletsprojects.com

일반적으로 파이썬으로 웹 개발을 할 때는 Django(장고) 또는 Flask(플라스크) 등의 모듈을 사용합니다. 

Django 는 매우 다양한 기능을 제공하는 웹 개발 프레임워크이고, Flask는 작은 기능만을 제공하는 웹 개발 프레임워크입니다.

 

Flask 모듈은 다음과 같은 명령어로 설치합니다.Beautiful Soup 모듈을 설치할 때와 마찬가지로 Window + R 키를 눌러 프로그램 실행 창을 띄우고 [cmd]를 입력하면 나타나는 명령 프롬프트에서 실행해야 합니다.

 

pip install flask

 

직접 해보는 손코딩

Flask 모듈 사용하기

 

@app.route()라고 되어 있는 부분은 데코레이터(decorator)라고 부릅니다.

 

Flask는 코드를 실행하는 방법이 약간 특이합니다.

다음과 같이 두 줄을 명령 프롬프트 창에 입력합니다. 이때 경로는 실행할 파일이 있는 위치여야 합니다.

$env:FLASK_APP="파일 이름"
flask run

 

이렇게 쓰면 실행된다는데...ㅠㅠ 실행이 안되서 인터넷을 찾아보니

app.run()을 쓴뒤에 바로 실행해보라해서 해보니 해결되었다.!!

 

 

ctrl+주소를 누르면 

이렇게 Hello World!가 나옵니다.

 

프로그램을 종료할 때는 CTRL+C를 눌러줍니다.

 

Flask 모듈은 @app.route(경로)처럼 '<경로>에 들어갈 때 실행할 함수'를 지정하는 형태로 사용합니다. 이때 함수에서 리턴하는 문자열을 기반으로 HTML 파일을 웹 브라우저에 제공해 줍니다.

<경로>에 들어갈 때마다 함수가 실행되므로, 이전에 만들었던 Beautiful Soup 스크레이핑을 실행하는 코드를 만든다면 다음과 같이 됩니다. 단지 이전의 코드를 hello( )함수 내부에 넣고, 문자열을 리턴하도록 바꾸었을 뿐입니다.

 

직접 해보는 손코딩

Beautiful Soup 스크레이핑 실행하기


 

책에 쓰여 있는데로 했는데 실행이 안되서 인터넷으로 찾아봤는데 그럴경우 app.run()을 적어준뒤에 실행하면 된다해서

해봤는데 실행이 되었다.

저번에한 flask 모듈 사용하기를 할때도 저렇게 적어줬었는데 이번에꺼도 그런걸 보니 flask 코드를 실행할때에는 마지막에

app.run()을 꼭 적어줘야 된다는것을 알았다.

실행이 안된다면 app.run()를 적어서 해보세요~~!!

 

 



ctrl+ 마우스로 웹브라우저 http://127.0.0.1:5000 를 클릭해준다. 

 

이러한 형태로 모듈과 모듈을 결합하면서 원하는 프로그램을 만들어 나갑니다.

 

라이브러리와 프레임워크

제어 역전(loc: Inversion of Contral) 여부에 따라서 달라집니다.

구분 설명
라이브러리(library) 정상적인 제어를 하는 모듈
프레임워크(framework) 제어 역전이 발생하는 모듈

 

제어역전: 제어가 역전되어 있다는 뜻으로 개발자가 모듈의 함수를 호출하는 것이 일반적인 제어 흐름이나, 이와 반대로 개발자가 만든 함수를 모듈이 실행하는 것을 말합니다.

 

라이브러리

: 개발자가 모듈의 기능을 호출하는 형태의 모듈을 라이브러리라고 합니다.

 

정상적인 제어 = 라이브러리

# 모듈을 읽어 들입니다.
from math import sin, cos, tan, floor, ceil


# sin, cos, tan를 구합니다.
print("sin(1):", sin(1))
print("cos(1):", cos(1))
print("tan(1):", tan(1))


# 내림과 올림을 구합니다.
print("floor(2.5):", floor(2.5))
print("ceil(2.5):", ceil(2.5))

 

프레임워크

 

 

 

Serving Flask app 'flask_basic' (lazy loading), Running on http://127.0.01:5000/(press CTRL+C to quit)라는 글자는 우리가 출력했던적이 없습니다. 

이것은 Flask 모듈 내부에서 출력되었습니다.

Flask 모듈이 제공하는 명령어를 실행하면 Flask가 내부적으러 서버를 실행한 뒤 지정한 파일을 읽어 들여 적절한 상황에 스스로 실행하게 됩니다.

이처럼 모듈이 개발자가 작성한 코드를 실행하는 형태의 모듈을 프레임워크라고 부릅니다.

 

개발자가 모듈의 함수를 호출하는 것이 일반적인 제어 흐름입니다. 그런데 이와 반대로 개발자가 만든 함수를 모듈이 실행하는 것은 제어가 역전된 것입니다. 이것이 바로 제어 역전입니다.

이러한 제어 역전의 여부로 라이브러리와 프레임워크를 구분합니다.

 

 

07-3 모듈 만들기

모듈 만들기

 

 

직접 해보는 손코딩

쉬운 모듈 만들기 1

 

먼저 module_basic 디렉터리(파일)을 만들어 준다.

 

쉬운 모듈 만들기 2

 

실행 결과

 

 

복잡하고 구조화된 모듈을 만들 때는 패키지(package)라는 기능을 사용합니다.

 

__name__=="__main__"

 

__name__

파이썬 코드 내부에서는 __name__이라는 변수를 사용할 수 있습니다.

>>> __ name__
'__main__'

 

엔트리 포인트(entry point) 또는 메인(main): 프로그래밍 언어에서의 프로그램의 진입점을 말합니다.

이러한 엔트리 포인트 또는 메인 내부에서의 __name--은"__main__"입니다.

 

모듈의__name__

엔트리 포인트가 아니지만 엔트리 포인트 파일 내에서 import 되었기 때문에 모듈 내 코드가 실행됩니다. 모듈 내부에서 __name__을 출력하면 모듈의 이름을 나타냅니다.

 

직접 해보는 손코딩

모듈 이름을 출력하는 모듈 만들기

 

모듈 이름을 출력하는 모듈 만들기

 

실행 결과:

 

test_module을 먼저 코딩해준 다음 main 코딩을 해주면 더 편하게 만들어집니다.

코드를 실행하면 엔트리 포인트(메인) 파일에서는 "__main__"을 출력하지만, 모듈 파일에서는 모듈 이름을 출력하는 것을 볼 수 있습니다.

 

__name__활용하기

엔트리 포인트 파일 내부에서는 __name__이"__main__"이라는 값을 갖습니다. 이를 활용하면 현재 파일이 모듈로 실행되는지, 엔트리 포인트로 실행되는지 확인할 수 있습니다.

 

직접 해보는 손코딩

모듈 활용하기

test_module



main

 

실행 결과:

 

그런데 현재 test_module.py라는 파일에는 '이런 식으로 동작해요!라는 설명을 위해 추가한 활용 예시 부분이 있습니다.

모듈로 사용하고 있는데, 내부에는 출력이 발생하니 문제가 됩니다.

 

이때 현재 파일이 엔트리 포인트인지 구분하는 코드를 활용합니다. 조건문으로 __name__이"__main__"인지 확인만 하면 됩니다.

 

직접 해보는 손코딩

엔트리 포인트를 확인하는 모듈 만들기

test_module

main

 

실행결과:

 

자주 사용되는 형태의 코드입니다. 인터넷에서 다른 사람들이 만든 코드를 보다 보면 100%의 확률로 만날 수 있을 텐데, 그럴 때 당황하지 않도록 꼭 기억하기 바랍니다.

 

 

패키지

모듈: import로 가져오는 모든 것을 말합니다.

패키지 관리 시스템: pip은 Python Package Index의 줄임말입니다.패키지: 모듈이 모여서 구조를 이루는것을 말합니다.

 

패키지 만들기

1. module_package 파일을 만들고 그안에 test_pakage파일을 만들어준다.

2.여기에 module_a 와 module_b를 만들어 줍니다.

3.main은 module_package 파일안에 만들어 줍니다.

 

패키지 만들기(1) module_a
패키지 만들기(1) module_b
패키지 만들기(1) main

 

실행 결과:

 

__init__.py 파일

:패키지를 읽을 때 어떤 처리를 수행해야 하거나 패키지 내부의 모듈들을 한꺼번에 가져오고 싶을 때가 있습니다. 

이럴 때는 패키지 폴더 내부에 __init__.py 파일을 만들어 사용합니다.

 

1. test_package 폴더 내부에 __init__.py파일을 만들어 봅니다.

2. test_package 폴더 외부에는 엔트리 포인트로 사용할 main_1.py 파일을 생성합니다.

 

직접 해보는 손코딩

패키지 만들기(2)

__init__.py

main_1

 

파일을 알맞은 저장경로에 저장하기!!!!!

( 파일을 맞는 장소에 저장해 줘야지 실행이 된다.)

 

명령어로 main_1.py 파일을 실행하면 다음과 같이 출력합니다.

 

main_1.py 파일로 패키지를 읽어 들일 때 __init__.py를 가장 먼저 실행하는 것을 알 수 있습니다.

 

*__init__.py 파일의 역할

: 파이썬 3.3 이전 버전에서는 __init__.py 파일이 무조건 있어야 패키지로 작동했지만, 이후 버전에서는 __init__.py 파일이 없어도 폴더 내부에 파이썬 파일이 들어 있기만 하면 패키지로 작동합니다.

 

 

08-1 클래스의 기본

객체 지향 프로그래밍 언어(Object Oriented Programming Language)

: 객체를 기반으로 프로그램을 만드는 프로그래밍 언어를 의미합니다.

C를 제외한 모든 프로그래밍 언어를 말합니다.

 

객체 지향 프로그래밍: 객체를 우선을 생각해서 프로그래밍한다는 의미입니다.

추상화: 복잡한 자료, 모듈, 시스템 등으로 부터 핵심적인 개념 또는 기능을 간추려 내는 것을 의미합니다.

♣ 클래스: 객체를 쉽고 편리하게 생성하기 위해 만들어진 구문입니다.

♣ 인스턴스: 클래스를 기반으로 생성한 객체를 의미합니다.

♣ 생성자: 클래스 이름과 같은 인스턴스를 생성할 때 사용하는 함수입니다.

♣ 메소드: 클래스가 가진 함수를 의미합니다.

객체

: 속성을 가질 수 있는 모든 것을 의미합니다.

 

예) 학생 성적 관리 프로그램을 만든다면 무엇이 필요할까요? 학생 이름, 학번, 과목별 성적 등이 필요합니다.

다음과 같이 이를 리스트와 딕셔너리로 표현해 보겠습니다.

 

직접 해보는 손코딩

객체 만들기

 

실행 결과:

딕셔너리로 학생을 표현하고 이를 리스트로 묶어 학생들을 표현했습니다.

현재 코드에서는 학생이 바로 객체입니다.

위에서 해본 object_1_basic.py는 객체를 활용해서 학생들의 성적 총점과 평균을 구하는 코드라고 할 수 있습니다.

 

 

딕셔너리를 생성하는 코드를 다음과 같은 형태의 함수로 만들면 딕셔너리를 입력할 때보다 쉽고, 키를 잘못 입력하는 실수더 하지 않게 됩니다.

 

직접 해보는 손코딩

객체를 만드는 함수(1)

 

실행결과는 이전과 같습니다.

 

학생을 매개변수로 받는 형태의 함수로 만들면 코드가 조금 더 균형 잡히지 않을까요?

한번 해봅시다~

 

직접 해보는 손코딩

객체를 처리하는 함수(2)

실행 결과는 이전과 같지만 코드가 조금 분리 되었습니다. 학생이라는 객체와 관련된 기능이 위로 올라갔고, 이러한 객체를 사용하는 처리가 아래로 내려갔습니다. 이렇게 만들면 '학생 객체와 관련된 기능'을 별도의 모듈로 빼서 관리할 수 있습니다.

 

이처럼 객체와 관련된 코드를 분리할 수 있게 하는 것이 객체 지향 프로그래밍의 핵심입니다.

개발자들은 위와 같은 코드를 조금 더 효율적으로 만들기 위한 기능으로 클래스 라는 구조를 만들었습니다

 

클래스 선언하기

클래스는 객체를 조금 더 효율적으로 생성하기 위해서 만들어진 구문입니다.

 

클래스의 기본적인 구문

Class 클래스 이름:
      클래스 내용:

 

클래스의 이름

각단어의 앞 글자를 대문자로 만들고 이를 합쳐서 이름을 만드는 캐멀 케이스 규칙을 지켜서 이름을 짓는것이 좋습니다.

예) BeautifulSoup()

 

이렇게 만들어진 클래스는 클래스 이름과 같은 함수(생성자)를 사용해서 객체를 만듭니다.

이전의 create_student()함수와 같은 것입니다.

인스턴스 이름(변수 이름) = 클래스 이름()   -----> 생성자 함수라고 부릅니다.

 

이러한 클래스를 기반으로 만들어진 객체를 인스턴스(instance)라고 부릅니다. 자주 사용하는 용어이므로 꼭 기억해 주세요.

붕어빵하니 붕어빵 먹고싶다~!!!

 

이를 기반으로 학생 6명을 선언한다면 다음과 같습니다.

# 클래스를 선언합니다.
Class Student:
      pass

# 학생을 선언합니다.
student = Student()


# 학생 리스트를 선언합니다.
students = [
    Student(),
    Student(),
    Student(),
    Student(),
    Student(),
    Student(),
]

 

생성자

생성자(constuctor): 클래스 이름과 같은 함수

- 클래스 내부에 __init__라는 함수를 만들면 객체를 생성할 때 처리할 내용을 작성할 수 있습니다.

class 클래스 이름: 
    def __ init__(self, 추가적인 매개변수)
         pass

 

클래스  내부의 함수는 첫 번째 매개변수로 반드시 self를 입력해야 합니다. 

이때 self는 '자기 자신'을 나타내는 딕셔너리라고 생각하면 됩니다. 다만 self가 가지고 있는 속성과 기능에 접근할 때는 self.<식별자> 형태로 접근합니다.

 

self는 키워드가 아니라 단순한 식별자이므로, 변수 이름으로 활용해도 됩니다. 하지만 모든 파이썬 개발자가 self라는 이름을 사용하고 있으므로 기본 규칙을 지키는 것이 좋겠습니다.

 

# 클래스를 선언합니다.
class Student:
      def__init__(sdlf,name,korean, math, english, science):
           self.name = name
           self.korean = korean
           self.math = math
           self.english = english
           self.science = science


# 학생 리스트를 선언합니다.
students = [
      Student("윤인성",87, 98, 88, 95),
      Student("연하진",92, 98, 96, 98),
      Student("구지연",76, 96, 94, 90),
      Student("나선주",98, 92, 96, 92),
      Student("나선주",95, 98, 98, 98),
      Student("나선주",64, 88, 92, 92),
]


# Student 인스턴스의 속성에 접근하는 방법
students[0].name
students[0].korean
students[0].math
students[0].english
students[0].science

이렇게 만들면 Student 인스턴스가 생성될 때 속성이 직접 추가됩니다.

 

 

메소드

메소드: 클래스가 가지고 있는 함수를 말합니다.

- 생성자를 선언하는 방법과 똑같습니다. 다만, 첫 번째 매개변수로 self를 넣어야 한다는 것을 다시 한번 기억해 주세요~!!

class 클래스 이름:
    def 메소드 이름(self, 추가적인 매개변수):
         pass

 

메소드와 함수

Java 등의 프로그래밍 언어는 클래스의 함수를 '메소드'라고 부를 정도로 메소드라는 용어를 많이 사용합니다.

하지만 파이썬 프로그래밍 언어는 멤버 함수(member function) 혹은 인스턴스 함수(instance function) 등의 용어를 더 많이 사용합니다. 이 책에서도 함수(function)라는 용어를 주로 사용합니다.

 

464쪽 <직접 해보는 손코딩 object_3_seperate.py>에서 만들었던 student_get_sum(), student_get_average(), student_to_string()함수를 클래스 내부에 구현해 보겠습니다. 앞에서는 매개변수로 student를 받았었는데, 이번에는 함수를 생성할 때 self를 입력합니다.

 

직접 해보는 손코딩

클래스 내부에 함수(메소드) 선언하기

 

 

실행 결과:

 

464쪽의 object_3_seperate.py에서는 student_to_string(student) 형태로 사용했지만, 이번에는 student.to_string()

형태로 사용했습니다. 어떠한 객체가 가지고 있는 어떠한 함수(기능)를 명확하게 이해할 수 있으므로 편리하다고 할 수 있습니다.

 

08-2 클래스의 추가적인 구문

 

♣ isinstance() 함수: 어떤 클래스의 인스턴스인지 확인할 때 사용하는 함수입니다.

클래스 변수와 클래스 함수: 클래스 이름 뒤에 .(마침표)를찍고 바로 사용할 수 있는 클래스가 갖고 있는 변수와 함수 입니다.

상속: 어떤 클래스를 기반으로 그 속성과 기능을 물려받아 새로운 클래스를 만드는 것을 말합니다.

 

어떤 클래스의 인스턴스인지 확인하기

1. 객체(인스턴스)가 어떤 클래스로부터 만들어졌는지 확인할 수 있도록 isinstance()함수를 제공합니다.

- isinstance()함수는 첫 번째 매개변수에 객체(인스턴스), 두 번째 매개변수에 클래스를 입력합니다.

isinstance(인스턴스, 클래스)

 

이때 인스턴스가 해당 클래스를 기반으로 만들어졌다면 True, 전혀 상관이 없는 인스턴스와 클래스라면 False를 리턴합니다.

예제)



출력하면

 

여기서 잠깐!!! 단순한 인스턴스 확인하는 경우라면

type(인스턴스) == 클래스

 

이 방법으로도 사용이 가능하지만 '상속을 사용할 때' 는 다르게 동작하기때문에 isinstance와 type의 차이가 있다는것을 알아둡시다~~

 

isinstance()함수와 type()함수로 확인하는 것의 차이

 

 

출력 하면

 

isinstance()함수는 다양하게 활용할 수 있는 기능입니다. 간단한 예로 하나의 리스트 내부에 여러종류의 인스턴스가 들어 있을 때, 인스턴스들을 구분하며 속성과 기능을 사용할 때 사용합니다.

 

 

직접 해보는 손코딩

isinstance()함수 활용

실행 결과:

 

일반적으로 객체 지향 프로그래밍은 모든 데이터를 클래스로 구현합니다.

isinstance()함수를 사용하면 이처럼 하나의 리스트로도 여러 종류의 데이터를 다룰 수 있습니다.

 

특수한 이름의 메소드

우리가 만든 Student 클래스를 기반으로 객체를 만들고 객체 뒤에 .(마침표)를 입력해서 자동 완성 기능(비주얼 스튜디오 코드)을 살펴보면 우리가 만들지 않았던 함수들이 잔뜩 들어 있는 것을 확인할 수 있습니다.

 

student = Student()

 

이는 모두 파이썬이 클래스를 사용할 때 제공해 주는 보조 기능입니다. 그런데 이름들이 조금 특이합니다.

__<이름>__()형태로 되어 있습니다. 이러한 메소드는 특수한 상황에 자동으로 호출되도록 만들어졌습니다.

 

__str__()을 클래스 내부에 정의해 보겠습니다. 다음과 같이 __str__()함수를 정의 하면 str()함수를 호출할 때 __str__()함수가 자동으로 호출됩니다.

 

직접 해보는 손코딩

__str__()함수

실행 결과:

 

 

 

크기를 비교하는 함수

이름 영어 설명
eq equal 같다
ne not equal 다르다
gt greater than 크다
ge greater than or equal 크거나 같다
lt less than 작다
le less than or equal 작거나 같

 

이를 사용하여 학생 성적 관리 프로그램을 만들어 봅시다.

 

직접 하는 손코딩

크기 비교 함수



 

실행 결과:

 

* 프로그래밍할 때는 항상 다른 사람가 함께 한다는 협업의 관점에서 이러한 함수를 사용하는 것이 좋습니다.

 

 

클래스 변수와 메소드

인스턴스가 속성과 기능을 가질 수도 있지만, 클래스가 속성(변수)과 기능(함수)을 가질 수도 있습니다.

 

클래스 변수

클래스 변수는  class 구문 바로 아래의 단계에 변수를 선언하기만 하면 됩니다.

이렇게 만들어진 클래스 변수는 다음과 같이 사용합니다.

 

클래스 변수 만들기

class 클래스 이름:
       클래스 변수 =

 

클래스 변수에 접근하기

클래스 이름.변수 이름

그냥 클래스가 가지고 있는 변수이므로, 사용 방법은 일반 변수와 다르지 않습니다.

 

직접 해보는 손코딩

클래스 변수



 

- 클래스 내부와 외부에서 클래스 변수에 접근할 때는 모두 student.count형태(클래스이름.변수이름)를 사용합니다.

(14행과 29행)

 일반적인 변수로 만드나 클래스 변수로 만드나 사용에는 큰 차이가 없습니다. 하지만 '클래스가 가졌다는 것'을 명시적으로 나타내서 변수를 만든다는 것이 포인트라고 할 수 있습니다.

 

클래스 함수

- 클래스 함수도 클래스 변수처럼 그냥 클래스가 가진 함수입니다.

- '클래스가 가진 기능'이라고 명시적으로 나타내는 것뿐이지만 생성하는 방법이 조금 특이합니다.

@classmethod 부분을 데코레이터라고 부릅니다.

 

* @로 시작하는 것을 파이썬에서는 '데코레이터'라고 하며 '꾸며 주는것'이라는 의미를 가집니다.

 

클래스 함수 만들기

class 클래스 이름:
       @classmethod
       def 클래스 함수(cls, 매개변수):
             pass

 

클래스 함수의 첫 번째 매개변수에는 클래스 자체가 들어옵니다. 일반적으로 cls(그냥'클래스'라고 읽으면 됩니다.)라는 이름의 변수로 선언하며, 이렇게 만들어진 클래스 함수는 다음과 같이 사용합니다.

 

클래스 함수 호출하기

 

클래스 이름.함수 이름(매개변수)

 

 

직접 해보는 손코딩

클래스 함수


 

실행 결과:

 

 

 

좀더 알아보기

가비지 컬렉터

: 더 사용할 가능성이 없는 데이터를 메모리에서 제거하는 역할을 합니다.

 

*  '더 사용할 가능성이 없는 데이터'라는 것은 무엇일까요?'

: 여러가지 경우가 있는데, 가장 대표적인 경우는 변수에 저장되지 않거나, 함수 등에서 나오면서 변수를 활용할 수 없게 되는 경우라고 할 수 있습니다.

 

직접 해보는 손코딩

가비지 컬렉터: 변수에 저장하지 않은 경우

실행 결과

 

A가 생성되고 다음 줄로 넘어갈때 이것을 변수에 저장하지 않으면 가비지 컬렉터는 이후에 활용하지 않겠다는 의미로 이해하고 메모리를 아끼기 위해 과감히 지워 버립니다.

 

만약 변수에 데이터를 넣으면 어떻게 되는지 볼까요??

직접 해보는 손코딩

가비지 컬렉터:변수에 저장한 경우

실행 결과:

이번에는 변수에 저장했습니다. 가비지 컬렉터는 나중에 활용할수도 있으니 좀더 지켜보자!라고 생각하고 프로그램이 종료되는 순간까지 데이터를 메모리에서 제거하지 않습니다. 따라서 A,B,C 생성후에 프로그램이 종료될 때 A,B,C파괴가 일어납니다.

사실 크게 중요한 내용은 아닙니다.

프로그램을 어떻게 만들어도 정말 이상하게 만들지 않는 이상, 가비지 컬렉터는 알아서 잘 작동하기 때문입니다.

 

프로그램 내부에서 무언가를 생성한다는 것은 메모리 위에 올린다는 의미입니다.

 

기본 미션

직접 해보는 손코딩

Beautiful Soup 스크레이핑 실행하기

 

책에 쓰여 있는데로 했는데 실행이 안되서 인터넷으로 찾아봤는데 그럴경우 app.run()을 적어준뒤에 실행하면 된다해서

해봤는데 실행이 되었다.

저번에한 flask 모듈 사용하기를 할때도 저렇게 적어줬었는데 이번에꺼도 그런걸 보니 flask 코드를 실행할때에는 마지막에

app.run()을 꼭 적어줘야 된다는것을 알았다.

실행이 안된다면 app.run()를 적어서 해보세요~~!!

 

실행 결과:



ctrl+ 마우스로 웹브라우저 http://127.0.0.1:5000 를 클릭해준다. 

 

 

선택 미션

혼공 용어노트에 나만의 언어로 객체, 클래스, 인스턴스, 생성자, 메소드 정리하고 공유하기

 

객체(object): 객체는 속성을 가질 수 있는 모든 것을 의미합니다.

클래스(class): 클래스는 객체를 쉽고 편리하게 생성하기 위해 만들어진 구문입니다.

클래스 구문

class 클래스 이름:
      클래스 내용

 

인스턴스(instance): 인스턴스는 클래스를 기반으로 생성한 객체를 의미합니다.

인스턴스 이름(변수 이름) = 클래스 이름()

클래스 이름(): 생성자 함수라고 부릅니다.

이러한 클래스를 기반으로 만들어진 객체를 인스턴스라고 합니다.

 

생성자(constructor): 생성자는 클래스 이름과 같은 인스턴스를 생성할 때 사용하는 함수입니다.

class 클래스 이름:
       def __init__(self, 추가적인 매개변수):
              pass

 

메소드(method): 메소드는 클래스가 가진 함수입니다.

- 첫 번째 매개변수로 self를 넣어야 합니다.

class 클래스 이름:
      def 메소드 이름(self, 추가적인 매개변수):
              pass

 

 

 

 

 

 

한주 한주 정해진 미션과 공부를 했더니 6주차라니~!!! 완주라니~!!!! 열심히 달려온 나 칭찬해!!!

하고싶은 말이 많지만 그건 회고록에서 써주겠어~!!!ㅎㅎㅎ

함께 열심히 달려온 우리 혼공파 가족분들과 혼공 족장님 그동안 감사했습니다.~!!

그리고 모두 완주하신거 축하합니당!!!!!

모두 새해 복 많이 많이 받으세용~!!

혼공 가족분들~우리 모두 2024년도 건강하고 바라는일 다 이루자구요~~!!!

기회가 된다면 여름 혼공파에서 또 만나요~!!!!!