본문 바로가기
BOOSTCAMP AI TECH/1주차_Python Basics For AI

[BOOSTCAMP AI TECH] 4일차_파이썬 기초문법3

by 이민우 2021. 1. 21.
728x90
반응형
  • 강의 목록

-Python Object Oriented Programming

-Module and Project


  • 요약

강의

파이썬의 객체지향 프로그래밍을 학습했다. 클래스와 인스턴스, 그리고 객체지향프로그래밍에 대한 개념을 학습했고, 파이썬에서 클래스 사용법을 학습했다.

또한 모듈과 패키지의 개념에 대해 학습하고, 파이썬에서 모듈 활용법을 학습했다.

 

피어세션

어제 배운 내용을 복습하는 시간을 가졌다.


  • 학습정리

객체 (Object)

  • 실생활에서 일종의 물건 혹은 생물
  • 속성(Attribute)와 행동(Action)을 가진다.

 

객체지향 프로그래밍 (Object Oriented Programming, OOP)

  • 실제 세상을 모델링한 것으로, 객체 개념을 프로그램으로 표현한 것이다.
  • 객체의 속성은 변수로, 행동은 함수로 구현한다.
  • 파이썬도 객체 지향 프로그래밍 언어이다.
  • 클래스와 인스턴스로 나뉜다.

 

클래스 (Class)

  • 객체를 만들어내는 양식
  • 객체가 붕어빵이라면, 객체를 만들어내는 클래스는 붕어빵 틀로 비유되곤 한다.

 

인스턴스 (Instance)

  • 클래스로 만들어진 실제 구현체

 

파이썬의 클래스

  • __는 특수한 예약 함수나 변수, 그리고 함수명 변경(맨글링)으로 사용한다.
  • ex) __main__, __add__, __str__, __eq__
  • __init__() : 초기화 함수
  • __str__() : toString()과 같은 역할. print(클래스명)시 해당 문장이 나옴.
  • __add__() : 두 객체를 합치는 방법 정의. 객체명+객체명 시 해당 함수가 사용됨.
  • self : 생성된 인스턴스 자신을 의미한다.
  • 함수 구현 시에는 파라미터에 self 키워드가 들어가야 class 함수로 인정된다.
#--class--#
class Person(object) : #object는 생략해도 무관함. 알아서 상속해옴.
    def __init__(self, name, age, gender) :
        self.name = name
        self.age = age
        self.gender = gender
    
    def __str__(self) :
        return f'{self.name}, {self.age}, {self.gender}, Person object'

class Korean(Person) : #Person 상속
    def __init__(self, name, age, gender, city) :
        super().__init__(name, age, gender) #부모의 생성자 호출
        #Person.__init__(name, age, gender) #다중 상속이면 첫 부모의 생성자만 불러오므로 이름 써서 사용
        self.city = city
    
    def __str__(self) :
        return f'{self.name}, {self.age}, {self.gender}, {self.city}, Korean object'


p = Person('kenny', 27, 'male')
k = Korean('lmw', 27, 'male', 'seoul')
print(p)
print(k)

 

상속 (Ingeritance)

  • 부모 클래스의 속성을 물려받은 자식 클래스는 생성하는 것

 

다형성 (Polymorphism)

  • 같은 이름 메소드의 내부 로직을 다르게 작성하는 것
  • Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모클래스의 상속에서 자주 발생
  • 중요한 OOP의 개념

 

가시성 (Visibility), 캡슐화 (Encapsulation)

  • 객체의 정보를 볼 수 있는 레벨을 조절하는 것
  • 정보 은닉이라고도 한다.
  • Class를 설계할 때 클래스 간 간섭과 정보공유를 최소화한다.
  • 클래스의 세부 구현내용을 공개하지 않고, 인터페이스만 알아서 쓰게 만들어야 함.
  접근 제어 파이썬 표현
public 어디서든 접근 가능 var
private 해당 클래스 내에서만 __var
protected 해당 클래스 내 혹은 상속 클래스 내에서만 _var

*privateprotected의 접미사는 밑줄 한 개까지 허용.

*밑줄이 두 개면 public으로 간주 __num__ => public

*protected는 파이썬에서는 실제로 제약하지는 않고 일종의 경고용

class encap () :
    def __init__(self) :
        self.__pri1 = '1'
        self.__pri2_ = '2'
        
        self._pro1 = '3'
        self._pro2_ = '4'

        self.pub1 = '5'
        self.pub2__ = '6'
        self._pub2__ = '7'
        self.__pub3__ = '8'

ec = encap()
#print(ec.__pri1, ec.__pri2_) #err
print(ec._pro1, ec._pro2_) #실제 제약되지는 않고 경고 표시로만 사용
print(ec.pub1, ec.pub2__, ec._pub2__, ec.__pub3__)

 

일등함수 (First class object)

  • 변수나 데이터 구조에 할당이 가능한 객체
  • 파라미터로 전달이 가능하고, 리턴 값으로도 사용할 수 있다.
  • 파이썬의 함수는 일등함수이다.

 

내부 함수 (Inner Function)

  • 함수 안에 존재하는 함수
  • closures : 내부 함수를 리턴값으로 반환하는 함수로, 자바 스크립트에서 자주 사용된다.
#--Inner Function--#
def print_msg(msg) :
    def printer() : #Inner Function
        return msg
    return printer() #Closures

pri = print_msg('hi')
print(pri)

 

Decorator

  • 위와 같은 복잡한 클로져 함수를 간단하게 만들어 주는 것.
  • 함수 위에 @함수명을 작성함으로써 활성화 가능
  • 다중상속처럼 여러 개를 사용할 수 있음.
#--Decorator--#
def star(func):
    def inner(*args, **kwargs):
        print("*" * 30)
        func(*args, **kwargs)
        print("*" * 30)
    return inner

def percent(func):
    def inner(*args, **kwargs):
        print("%" * 30)
        func(*args, **kwargs)
        print("%" * 30)
    return inner

@star
@percent
def printe(msg) :
    print(msg)
printe("Hello")

 

모듈 (Module)

  • 어떤 대상의 부분 혹은 조각
  • 프로그램에서는 작은 프로그램 조각들을 의미함.
  • 모듈들을 모아 하나의 큰 프로그램을 개발
  • 프로그램을 모듈화 시키면 다른 프로그램들이 사용하기 쉬움
  • 파이썬에서 모듈은 .py를 의미.
  • import 문을 사용해 모듈을 호출할 수 있음.

 

Namespace

  • 모듈을 호출할 때 범위를 정하는 방법
  • 모듈 안에는 함수와 클래스 등이 존재한다.
  • 필요한 내용만 골라 호출할 수 있게 한다.
  • from과 import 키워드를 사용한다.
  • Alias를 설정해 모듈명을 별칭으로 활용할 수 있다. ex) import numpy as np
  • 특정 함수 또는 클래스만 호출 가능하다. ex) from numpy import 함수명
  • 모듈의 모든 함수와 클래스를 호출할 수 있다. ex) from numpy import *

 

Built-in Modules

  • 파이썬이 제공하는 기본 라이브러리
  • 문자처리, 웹, 수학 등 다양한 모듈이 제공된다.
  • 별다른 조치 없이 import문으로 사용할 수 있다.

*모듈을 import 한 후 Help를 쓰면 도움말 가능

 

패키지 (Package)

  • 모듈들을 모아놓은 단위, 하나의 프로그램
  • 하나의 대형 프로젝트를 만드는 코드의 묶음
  • 다양한 모듈들의 합, 폴더로 연결된다.
  • 다양한 오픈 소스들이 모두 패키지로 관리된다.

 

패키지 네임스페이스

  • from a.b.c import 함수명() : 절대참조
  • from . import 함수명() : 현재 디렉토리 기준 참조
  • from ..a.b.c import 함수명() : 부모 디렉토리 기준 참주

 

__init__.py

  • 현재 폴더가 패키지임을 알리는 초기화 스크립트
  • 없을 경우 패키지로 간주하지 않았는데, 파이썬 버전 3.3부터는 딱히 그렇지 않다.
  • 하위 폴더와 py파일을 모두 포함해야 한다.
  • import 와 __all__ keyword를 사용한다.
  •  __all__ = [‘image', 'stage', ..py파일들.. ]
  •  from . import image
  •  from . import stage
  •  ...py파일들...

 

파이썬 가상 환경 설정하기

  • 가상 환경 : 프로젝트 진행 시 필요한 패키지만 설치하는 환경
  • 기본 인터프리터 + 프로젝트 종류별 패키지 설치
  • 다양한 패키지 관리 도구를 사용한다.
  1. virtualenv + pip : 가장 대표적인 가상환경 관리도구로 레퍼런스와 패키지 개수가 많음.
  2. conda : 상용 가상환경도구이자 anaconda와 miniconda 기본 도구로 설치가 용이하고 Windows에서 좋음.

*windows에서는 conda, linuxmac에서는 conda or pip

 

conda 명령어

  • 가상환경 만들기 : conda create -n 가상환경이름 python=버전
  • 가상환경 호출 : conda activate 가상환경이름
  • 가상환경 해제 : conda deactivate
  • 패키지 설치 : conda install 패키지명

  • 피어세션 회의 내용

모더레이터의 전날 수업 발표를 통해 미처 몰랐거나, 혹은 알았으나 망각했던 지식들을 얻었다.

  • 튜플 선언시 (1) 이렇게하면 안되고 (1,) 이렇게 해야 인식된다.
  • set에서 remove는 존재하지 않는 원소 지우면 에러가 발생하나 discard는 에러가 발생하지 않는다.
  • yield from (리스트명)시 굳이 포문 안돌려도됨. (3.3부터)
  • default argument 값은 가능한 뒤로 뺀다.
  • **에는 dict 값으로 입력됨

  • 해야할 일

파이썬에서 제공하는 여러 모듈들의 활용법을 학습해야 겠다는 필요성을 느껴 공부를 진행했다.

 

123okk2.tistory.com/89

 

파이썬 모듈들

Numpy -과학 계산을 위한 파이썬 패키지 -다차원 배열을 위한 기능과 선형대수 연산, 푸리에 변환 같은 고수준 수학함수 포함 -유사 난수 (Pseudo) 포함 -scikit-learn에서 Numpy 배열을 기본 데이터 구조

123okk2.tistory.com

 


 

728x90
반응형