AI SCHOOL/TIL

[TIL] 멋사 AI SCOOL DAY 9 - 파이썬 클래스, 모듈, 패키지, 예외 처리

moru_xz 2023. 1. 6. 16:59

멋사 AI SCOOL 9일차

: Python 모듈, 패키지, 예외처리

  

* Keywords

#class

#module

#package

#import

#from #as

 

* Today I Learned

지난 시간 복습
- 변수와 함수를 묶어서 코드를 작성하는 방법
- 객체지향을 구현하는 문법
    - 객체지향 : 실제세계를 모델링하여 프로그램을 개발하는 개발방법론 -> 협업 용이
- 클래스 사용법 
    - 클래스 선언(코드 작성) -> 객체 생성(메모리 사용) -> 메서드 실행(코드 실행)
    - 클래스 선언(설계도 작성) -> 객체 생성(제품 생산) -> 메서드 실행(기능 사용)
- 클래스 식별자 : PasacalCase
- class, self(객체 자신)
- 클래스는 사용자 정의 데이터 타입이다
    - type(account) : Account -> 클래스는 데이터 타입이다 
    - Account 클래스는 직접 만듦 -> 클래스는 사용자 정의 데이터 타입이다
    - 객체는 어떤 데이터타입(클래스)으로 만들어졌는지에 따라서 사용 가능한 변수, 함수가 다르다.
- 스페셜 메서드
    - 특별한 기능을 하는 메서드
    - __intint__() : 생성자 메서드
        -객체가 생성될 때 실행되는 메서드
        - 메서드에서 사용되는 변수를 초기화 할 때 사용 -> 불량품 객체가 생성되는 것을 줄일 수 있음
        -__add__() : +연산자 정의하는 메서드
            - int데이터 타입의 + 연산과 str 데이터 타입의 + 연산이 다르게 수행 
            - python의 list와 numpy의 ndarray 데이터 타입이 수행되는 연산이 다르다 -> ndarray 연산이 속도가 빠르다
        - __str__(), __repr__() : print()함수, ipython에서 출력하는 기능을 수행
- 상속
    - 다른 클래스의 변수, 함수를 가져오는 방법 
    - 다중 상속 가능

 

7) 클래스

스타크래프트 클래스 연습

class Marine : 

    def __init__(self, health = 40, attack_pow = 5) :
        self.health = self.max_health = health
        self.attack_pow = attack_pow

    def attack(self, target) : 
        target.health -= self.attack_pow
        if target.health < 0 :
            target.health = 0
class Medic : 

    def __init__(self, health = 60, heal_pow = 6) :
        self.health = health
        self.heal_pow = heal_pow

    def heal(self, target) : 
        target.health += self.heal_pow
        if target.health > target.max_health:
            target.health = target.max_health
m1 = Marine()
m2 = Marine()

medic = Medic()
m1. health, m2.health
m1.attack(m2)
m1.health, m2.health
m1.attack(m2)
m1.health, m2.health

 

getter, setter

- 객체의 내부 변수에 접근할 때 특정 메서드(getter, setter)를 거쳐서 접근할 수 있도록 하는 방법

 

mangling

- 변수에 직접적으로 접근하는 것을 막는 방법

- 사용법 : 변수명 앞에 __를 붙임 (임의로 못 바꾸게)

class Person:

    def __init__(self, pw):
        self.__hidden_pw = pw

    def getter(self):
        print('getter')
        return self.__hidden_pw

    def setter(self, new_pw):
        print('setter')
        input_pw = input('insert password : ')
        if input_pw == self.__hidden_pw:
            self.__hidden_pw = new_pw
        else:
            print('wrong password!')

    pw = property(getter, setter)
    
    person = Person('abcd')
person__hidden_pw = 'qqqq' #x
person.pw = 'wwww' #setter통해서만 접근 가능

메서드 종류

- 인스턴트 메서드 : 파라미터 self : 객체를 이용하여 메서드 호출

- 클래스 메서드 : 파라미터 cls : 클래스를 이용하여 메서드 호출 : 객체로 생성된 초기 변수값을 모두 수정

- 스태틱 메서드 : 파라미터 x : 객체럴 선언하지 않고 메서드 호출 

- 클래스 메서드, 스테틱 메서드 차이 : 클래스 메서드는 클래스 변수에 접근 가능

- 인스턴스 메서드로 바꾸면 클래스 메서드 사용해도 아무런 변화 x 

 

is a와 has a 개념

- is a : A is a B : 상속을 이용해서 클래스 설계
- has a : A has a B : 객체를 객체에 넣어서 클래스 설계
- 두가지 방법을 혼용해서 사용

is a

# is a
class Info:
    def __init__(self, name, email):
        self.name = name
        self.email = email
        
class Person(Info):
    def show(self):
        print(self.name, self.email)
        
person = Person('peter', 'peter@gmail.com')
person.name, person.email

has a

# has a
class Name :
    def __init__(self, name) :
        self.name_str = name
class Email : 
    def __init__(self, email) :
        self.email_str = email
        
class Person:
    def __init__(self, name_obj, email_obj):
        self.name = name_obj
        self.email = email_obj
    def show(self):
        print(self.name.name_str, self.email.email_str)
        
name_obj = Name('peter')
email_obj = Email('peter@gmail.com')

8) 입출력

- RAM -> SSD(HDD), RAM <- SSD(HDD)
- RAM -> 직렬화(byte()) -> SSD(HDD)
- pickle : 직렬화, 입출력 속도가 빠름 

 

- 입출력 사용 X
- 학습 데이터 -> 모델링(학습 : 8h) -> 모델객체(RAM) -> 예측
- 학습 데이터 -> 모델링(학습 : 8h) -> 모델객체(RAM) -> 예측
- 학습 데이터 -> 모델링(학습 : 8h) -> 모델객체(RAM) -> 예측

- 입출력 사용 O
- 학습 데이터 -> 모델링(학습 : 8h) -> 모델객체(RAM) -> 모델 저장(SSD) -> 예측
- 모델로드(SSD -> RAM : 5min) -> 예측

 

9) 모듈, 패키지

- 모듈 : 변수, 함수, 클래스를 하나의 파일(.py)로 모아서 코드 작성
- 패키지 : 여러개의 모듈 파일을 디렉토리로 구분하여 코드를 작성하는 방법 -> 버전정보 

 

10) 예외처리

- 코드의 에러를 처리하는 방법, 문법

- try, except, finally, raise

 

* Homework

 

 

* Reference

 

 


* Retrospective

😍 Liked

파이썬 5일 안에 훑다... 

 

 

📚 Learned

파이썬 클래스

입출력

모듈 패키지 - import from as

예외처리 

데이터 사이언티스에게 필요한 역량

 

💦 Lacked

파이썬을 다 알기에는 턱없이 부족한 시간인 5일

앞에 내용이 헷가리다 보니 뒷 부분을 따라가기에 어려움이 있음 

 

🙏 Longed for

- 파이썬 함수, 클래스 공부