(Python) 01.31.금 TIL

Kepler·2020년 1월 31일
0

Class

  • class: 부류 예) 현대자동차는 자동차의 부류에 속해있다.
  • instance : 실체 예) 현대 제네시스는 자동차의 실체이다.
  • object : 객체 예) 제네시는 자동차 부류를 실체화(instantiate)한 객체이다.
  • Class의 attribute : 클래스의 성질이나 속성 예) 자동차는 maker, model name, horse power 등의 성질을 가지고 있다.
    + __in-it함수를 통해 구현: class를 실체화할 때 사용하는 함수
    +
    : special methods, 특별취급 받는 함수들
    + self parameter 란? 실체를 가르킴. 클래스가 실체화된 객체를 넘겨주어야 하므로, 파이썬이 자동으로 넘겨줌
    + parameter들을 self에 저장하는 이유? 다른 메소드에서 사용하기 위해
class Car:
    def __init__(self, maker, model, horse_power):
        self.maker       = maker
        self.model       = model
        self.horse_power = horse_power  
        
hyundai = Car("hyundai","genesis",500)   # __init__이 자동으로 호출됨
  • Method : 객체가 행할수 있는 action. 예) 자동차는 달리고, 경적을 울릴수 있다.
    + method_name(self) 로 구현
class Car:
    def __init__(self, maker, model, horse_power):
        self.maker       = maker
        self.model       = model
        self.horse_power = horse_power

    def honk(self):
        return f"{self.maker} 빠라바라빠라밤"
      
hyundai = Car("hyundai","genesis",500)   # __init__이 자동으로 호출됨
hyundai.honk()
> "hyundai 빠라바라빠라밤"

Modules and Packages

  • Module: 변수, 함수, 클래스 등을 모아놓은 파일
    • 다른 파일에서 재사용이 가능
    • 전체 코드가 커졌을 때 여러 파일로 나누어서 정리하기 위해
    • 예) list의 len함수는 사실 파이썬에서 구현해놓은 모듈
  • Module 만들기 : 새 파일 안에 재사용하고 싶은 함수등을 구현 (.py파일)
  • Module 사용하기 :import 키워드 사용
# 대표 import 방법

import my_module        # import <모듈 이름> 
my_module.func()        # <모듈이름>.<사용할 함수/클래스/변수 등>
                        # anem space : 이름이 영역을 알려줌  
# import의 다양한 방법들을 소개

#1. 모듈에서 불러오고 싶은 내용만 불러오기

# from <모듈이름> <함수/변수/클래스1>, .... , <함수/변수/클래스N>
from my_module import my_module_func, my_module_var

print(my_module_var)
my_module_func()


#2. 모듈에서 모든 내용 불러오기 !다른 함수등과 이름충돌이 날수 있으므로 권장X

# from 모듈이름 import *
print(my_module_var)
my_module_func()


#3. 모듈에서 불러온 함수등의 이름 바꾸어서 사용하기 (이름충돌 방지)

# from <모듈이름> import <함수> as <새함수이름>
from my_module  import my_func as f1
from my_module2 import my_func as f2

f1()
f2()
  • Package : module과 비슷하나, module보다 더 크고 복잡한 코드
    • module의 크기가 너무 커서 한 파일에 관리하기 비효율적일 때, 코드를 나누어 관리함. 이런 여러 파일에 나누어져 있는 코드를 다시 하나의 module로 불러와서 사용할 수 있게 한것이 package.
    • 디렉토리 = package
  • Package의 사용 : import <패키지이름.모듈이름>
# main.py
import pkg.mod1
from pkg.mod2 import func2

pkg.mod1.func2()
func2()
  • Package initialization : __init__.py 파일 사용
    1. Import 할때 경로의 총 길이 줄여주기
    2. Package에서 import 할 수 있는 변수/함수/클래스 제한하기
    3. 그 외 package가 import될때 꼭 먼저 실행되어야 하는 코드들
# 1. 길이 줄이기

# __init__.py
from mod1 import func2   #__init__안에 사용할 모듈과 함수의 import값을 설정

# main.py
from pkg import func2   #이로써, main에서는 pkg에서 바로 함수가 사용 가능

func2()


# 2.  __all__ list 이용하여 import할 요수들을 제한하기

# __init__.py
from mod1 import func2
from mod2 import func3

__all__ = ['func2', 'func3']  #여기서 정의된 함수만이 main에서 접근 가능.

# main.py
from pkg import *

func2()
func3()
func4() ## <== Err. func4는 __all__ 에 정의되지 않았으므로 import 될 수 없음.
  • 다른사람의 package 사용 : pip install <pkg이름>

Excepion Handling

  • 예외 처리 : 의도하지 않은 에러가 일어아는 경우의 처리 함수
    + 예외 발생시, 다음 코드가 실행되지 않고 프로그램이 종료
    • 예외 처리를 해주면, 프로그램이 종료되지 않고 다른 로직을 실행하게 하여 continue
예제:
def return_elem_or_minus_one(index):
    short_list = [1, 2, 3]
    elem = 0

    try:
        elem = short_list[index]
        print("이 문장은 exception이 발생하지 않으면 실행됩니다")
    except IndexError:    # except 에러이름 => 에러 종류를 지정
        print(f"이 문장은 Exception이 발생하면 실행 됩니다")
        elem = -1
    except Exception as e: # except 에러이름 as e => 종류를 지정하지 않고 객체에서 exception 정보를 받음 (모든 exception을 catch)
        print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다 ==> {e}")
        elem = -1
    else: # exception이 발생하지 않았을때 실행됨
        print(f"Exception이 발생하지 않았습니다!") 
    finally: # exception 여부에 상관없이 마지막에 실행됨
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")

    return elem
profile
🔰

0개의 댓글