파이썬 기초4

ganta·2021년 1월 21일
0

파이썬 기초

목록 보기
4/9
post-thumbnail
post-custom-banner

이번 포스팅에서는 파이썬의 클래스, decorate, 패키지와 모듈에 대한 개념을 정리해 보았습니다.

파이썬의 클래스


  • 객체
    물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중 자신의 속성을 가지고 있고 다른것과 식별 가능한 것

  • 클래스
    객체를 정의하는 틀 또는 설계

  • 인스턴스
    메모리에 할당된 객체

  • 파이썬의 클래스 선언
    class 예약어 - class 이름 - 상속받는 객체명으로 이뤄짐(object는 생략가능)

class Person(object)
  • 파이썬의 클래스는 CamelCase사용

  • "__"는 특수한 예약 함수나 변수, 함수명 변경(맨글링)으로 사용

    • 네임 맹글링(name mangling) : 파이썬이 변수/함수의 이름을 짓이겨서 다른 이름으로 바꿔 버리는 것을 말하고 변수/함수명 앞에 언더바(_)를 두개 붙여서 적용
  • 파이썬 클래스의 선언 및 객체

    이때, pass예약어를 사용하게 되면 아무런 기능을 하지 않는다.

  • 파이썬 클래스의 Magic Method 및 일반 Method 선언 및 사용

    • Magic Method : Special Method라고도 불리면서 파이썬이 내부적으로 구현된(빌트인)메소드를 구현함

    • Magic Method 종류

      • __new__
        새로운 인스턴스 생성시 제일 처음으로 실행되는 메소드

      • __init__
        인스턴스가 __new__로 생성된 후, 호출되는 메소드

      • __add__
        더하는 메소드

      • __doc__
        Docstring을 출력하는 메소드

      • __bool__
        Boolean유무를 나타내는 메소드

      • __mul__
        곱하는 메소드

      • __sub__
        빼는 메소드

      • __le__
        작거나 같다

      • __del__
        객체가 없어질 때 호출되는 메소드

      • __bytes__
        객체를 나타내는 byte문자열

      • __format__
        객체를 나타내는 format을 지정하고 싶을 때 사용

      • __len__
        객체의 길이를 반환

      • __iter__
        컨테이너의 iterator를 반환

      • __reversed__
        순서가 반대로 바뀌는 reversed()함수 호출

      • __contains__
        item 인자를 받고, 존재하면 True, 아니면 False
        정의되지 않으면 __iter__를 통해 이터레이션을 돌며 확인함

  • OOP(Object-Oriented Programming)의 속성

    • 상속(Inheritance)
      부모클래스로부터 속성과 Method를 물려받은 자식 클래스를 생성하는 것

    • 다형성(Polymorphism)
      같은 이름의 메소드의 내부 로직을 다르게 작성함으로써 여러 가지 형태를 지니게 할 수 있다.

      -가시성(Visibility)
      누구나 객체 안의 보든 변수를 볼 필요가 없음으로 접근 권한을 제어
      "__"를 필드 명 앞에 붙혀 Private 변수로 선언 가능
      (엄밀하게 말하면 접근이 가능하나 경로를 복잡하게 하여 마치 Private변수처럼 사용하게 함 <인스턴스._클래스명__필드이름 으로 접근>)

      "_"를 필드 명 앞에 붙혀 Protected 변수로 선언 가능

      decorator를 이용하여서도 private변수에 접근이 가능

Decorator


함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수

  • 필수 핵심개념
    • first-calss object
    • inner function
    • decorator
  • First-class objects
    • 일등함수 또는 일급객체라 한다
    • 변수나 데이터 구조에 할당이 가능
    • 파라미터, 리턴값으로 사용 가능
  • inner function
    • 함수내에 또 다른 함수가 존재
    • inner function을 반환할 수 있음(장점 : 함수 콜이 종료되더라도 내부 함수안에서 함수 인자 값이 그대로 존재) -> 같은 함수에서 기능을 분리하여 관리가 가능
      또한 inner fuction을 return 하는 것을 클로저(Closures)라고 한다.
    • 클로저 활용
    • 클로저를 활용한 decorator
      @함수명 이 붙은 함수는 인자로 들어가게 되고 inner function의 인자는 함수안의 파라미터 값들이 들어가서 작동을 하게 된다.


      이때, star(percent(printer("Hello")))형태처럼 작동이 되는 것을 확인 할 수 있다.

      위와 같이 좀 더 여러 층으로 구성이 가능, 인자값 또한 넘겨주는 형태로 코드를 작성 할 수 있다.(generate_power -> wrapper -> inner)

모듈, 패키지


  • 파이썬 코드의 규모관계
    클래스 < 모듈 < 패키지 < 프로젝트

  • 모듈

    • 프로그램 관점에서 작은 프로그램 부분

    • 프로그램 개발시 다수의 모듈로 구분하여 개발

    • built-in Module : 이미 파이썬에 내장된 모듈

    • 파이선의 모듈 -> .py파일을 의미

    • import문을 사용하여 모듈을 불러 올 수 있고 이때, __pychach__디렉토리에 pyc파일이 저장됨(pyc파일 : 파이썬 모듈을 쉽게 불러올 수 있도록 파이썬 인터프리터가 먼저 기계어로 번역)

    • namespace : 모듈을 호출할 때 범위를 정하는 방법을 말한다.

      1, Alias 방법
      ex) import 모듈명 as alias명칭
      2, 모듈에서 특정 함수 또는 클래스 호출
      ex) from 모듈명 import 함수 혹은 클래스명
      3, 모듈에서 모든 함수 또는 클래스 호출
      ex) from 모듈명 import *
      4, 패키지를 통한 모듈 호출
      ex) from 패키지명 import 모듈명
      5, 패키지를 통한 함수 또는 클래스 호출
      ex) from 패키지&모듈명(경로 접근) import 함수 혹은 클래스명
      6, 패키지를 가져옴
      ex) from 경로 import 패키지명

    • 모듈 사용예시


    • built-in Module 사용 예시

      • matplotlib : 그래프 지원
      • tqdm : loop이 돌때 한번 돌릴때 어느정도 시간이 걸리고, 앞으로 어느정도 시간이 남았는지 계산해서 보여줌

  • 패키지

    • 하나의 대형 프로젝트를 만드는 코드의 묶음

    • __init__, __main__등의 키워드 파일명이 사용
      (__init__ : 사용할 모듈을 가져옴, __main__ : 패키지 실행시킬때 작동하는 main함수에 해당하는 부분을 넣어줌)

    • __init__파일이 있어야 패키지로 간주하였으나 파이썬 3.3이후부터는 없어도 패키지로 간주

    • 터미널 python명령어로 실행 가능(__main__수행)
      터미널 명령어

      python3 패키지명

    • 다음과 같이 패키지 구성이 가능(example_package가 최상위 패키지라 설정하고 구현)

    • example_package의 __init__ 모듈에 사용할 모듈들을 정의

    • 세부 패키지 또한 __init__ 모듈에 사용할 모듈들을 정의


    • example_package의 __main__ 모듈에 사용할 모듈들을 가져와 사용

패키지 관리 도구


  • virtualenx + pip

    • 장점
      레퍼런스와 패키지가 많음
    • 단점
      패키지를 받아오는 안 어떤 코드는 c에 컴파일 되서 사용되야 하는데 pip로 받아 올 시 컴파일 된 코드가 안들어 가 있는 경우가있음
  • conda

    • 장점
      virtualenx + pip에서의 단점인 면이 보완되어 패키지 다운받을 때 컴파일된 도구들을 같이 주게 되어있음
    • 단점
      virtualenx + pip보다 패키지가 적음(지금까지는 conda로도 부족했전 점을 느끼지는 못하였었음)

Reference

Naver BoostCamp AI Tech - edwith 강의
https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=220934409189&proxyReferer=https:%2F%2Fwww.google.com%2F
https://jwprogramming.tistory.com/121
https://tibetsandfox.tistory.com/21
https://zzsza.github.io/development/2020/07/05/python-magic-method/
https://responding.tistory.com/44
https://medium.com/@hckcksrl/python-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-decorator-980fe8ca5276
https://wikidocs.net/1418

profile
한걸음씩 꾸준히
post-custom-banner

0개의 댓글