프로그래밍 시작하기 : 파이썬 입문(Inflearn Original)
6. 파이썬 클래스 및 모듈, 패키지
6-1. Class : 객체지향 들어보셨죠?
# OOP 객체지향 프로그래밍, self, 인스턴스 메소드, 인스턴스 변수
# 클래스 and 인스턴스 차이 이해
# 예제1
class Dog: #Object 상속
# 클래스 속성
species = 'firstdog'
# 초기화/인스턴스 속성
def __init__(self, name, age):
self.name = name
self.age = age
# 인스턴스 : 코드에서 사용되는 실제
# 클래스 정보
print("info- ", Dog)
# 인스턴스화
a = Dog("micky", 2)
b = Dog("baby", 3)
# 비교
print(a==b, id(a), id(b))
c = Dog("micky", 2)
# 인스턴스화 시킨 건 전부 다르다.
# 네임스페이스 : 객체를 인스턴스화 할 때 저장된 공간
print('dog1', a.__dict__)
# 클래스 변수 : 직접 접근 가능, 인스턴스 변수 : 객체마다 별도 존재
# 인스턴스 속성 확인
print('{} is {} and {} is {}'.format(a.name, a.age, b.name, b.age))
if a.species == 'firstdog':
print('{0} is a {1}'.format(a.name, a.species))
print(Dog.species)
#self 의 이해
class SelfTest:
def func1(): # 클래스 메소드
print("Func1 called")
def func2(self): # 인스턴스화 시킨 변수만 호출 가능.
print("Func2 called")
print(self)
# init이 없어도 파이썬이 내부에서 자동으로 만들어줌
f = SelfTest()
print(dir(f))
print(id(f))
#f.func1() #에러 # 자동으로 instance 의 id를 넘긴다.
f.func2()
SelfTest.func1()
# 클래스 변수, 인스턴스 변수
class Warehouse:
stock_num = 0 # 재고
def __init__(self, name):
#인스턴스 변수
self.name= name
Warehouse.stock_num +=1
def __del__ (self): # 소멸자
Warehouse.stock_num -= 1
user1 = Warehouse('Lee')
user2 = Warehouse('Cho')
print(Warehouse.stock_num)
print(user1.name)
print(user2.name)
print(user1.__dict__)
print(user2.__dict__)
print(Warehouse.__dict__)
del user1
로 소멸자 호출 가능, 객체가 지워짐
#
class Dog:
species = 'firstdog' # 클래스 속성
def __init__(self, name, age): #초기화, 인스턴스 속성
self.name = name
self.age = age
def info(self):
return '{} is {} years old'.format(self.name, self.age)
def speak(self, sound):
return "{} says {}!".format(self.name, sound)
c = Dog('july', 4)
#메소드 호출
print(c.info())
print(c.speak('Wal Wal'))
d = Dog("marry", 10)
print(d.info())
6-2. Module : 파이썬에서는 모듈 단위로 일을 해요
# 파이썬 모듈
# Module : 함수, 변수, 클래스 등 파이썬 구성 요소 등을 모아놓은 파일
def add(x, y):
return x+y;
def sub(x, y):
return x-y;
def mul(x, y):
return x*y;
def div(x, y):
return x/y;
def pow(x, y):
return x ** y
print('-' * 15)
print('called! inner!')
print(add(5, 5))
print(sub(5, 10))
print(mul(3, 3))
print(div(10, 2))
print('-' * 15)
# 모듈 사용 실습
import sys
print(sys.path)
print(type(sys.path))
# 모듈 경로 삽입
sys.path.append('./math')
print(sys.path)
import test_module
# 모듈 사용
print(test_module.pow(10,3))
# __name__ 사용
if __name__ == "__main__":
print('-' * 15)
print('called! inner!')
print(add(5, 5))
print(sub(5, 10))
print(mul(3, 3))
print(div(10, 2))
print('-' * 15)
파일을 직접 실행할 때만 코드가 실행됨.
6-3. Package : 패키지 구조를 알아야 파이썬을 쉽게 이해해요.
# 파이썬 패키지
# 파이썬은 패키지로 분할 된 개별적인 모듈로 구성
# 상대경로 : ..(부모), .*(현재) -> 모듈 내부에서만 사용
import sub.sub1.module1
import sub.sub2.module2
sub.sub1.module1.mod1_test1()
sub.sub1.module1.mod1_test2()
sub.sub2.module2.mod1_test1()
sub.sub2.module2.mod1_test2()
print()
print()
from sub.sub1 import module1
from sub.sub2 import module2 as m2
module1.mod1_test1()
m2.mod1_test1()
#from sub.sub1 import *
#module1.mod1_test1()
__all__ = ['module1']
__init__.py : Python 3.3부터는 없어도 패키지로 인식. 단, 하위 호환을 위해 작성 추천.
init에서 외부에서 사용할 수 있는 파일을 선별해서 넣을 수 있음
7. 파이썬 예외처리
7-1. Exception : 앗! 에러가 발생할 경우 처리해야겠죠?
# 파이썬 예외처리의 이해
# 예외 종류 : syntaxError, TypeError, NameError, IndexError, ValueError, KeyError...
# 문법적으론 예외가 없지만 코드 실행 프로세스(단계) 발생하는 예외도 중요
# 예외는 반드시 처리해야 한다.
# 로그를 반드시 남기는 것이 좋다
# 예외는 던져진다.
# 예외 무시
# syntaxError : 문법 오류
# print('error'))
# if True
# NameError : 참조 없음
# a = 10
# print(c)
# ZeroDivisionError
# prinnt(100/0)
# IndexError
#x = [50, 70, 90]
#print(x[4])
# KeyError
#dic = {'name' : 'Lee', 'Age': 40}
#print(dic['hobby'])
# 예외 없는 것을 가정하고 프로그램 작성 시 -> 런타임 예외 발생 시 예외 처리를 권장
# EAFP에 적혀 있다.
# AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용 예외
# print(time.time2())
# ValueError
# x = [10, 50, 90]
# x.remove(50)
# x.remove(200) # value error. 리스트 안에 값이 없을 떄
# FileNotFoundError
# f = open('test.txt')
# TypeError : 자료형에 맞지 않는 연산 수행 시
# x = [1, 2]
# y = (1, 2)
# print(x+y) # 가변형 + 불변형은 더할 수 없다.
# 예외 처리
# try : 에러가 발생할 가능성이 있는 코드 실행
# except 예러명2 : 여러 개 가능.
# else : try 블록의 에러가 없을 경우 실행
# finally : 항상 실행되는 블록
name = ['Kim', 'Lee', 'Park']
# 예제1
try:
z = 'Kim'
x = name.index(z)
print('{} Found it! {} in name'.format(z, x+1))
except ValueError:
print('Not found it! - Occurred ValueError!')
else:
print('Ok! else.')
print()
name = ['Kim', 'Lee', 'Park']
# 예제1
try:
z = 'Cho'
x = name.index(z)
print('{} Found it! {} in name'.format(z, x+1))
except ValueError:
print('Not found it! - Occurred ValueError!')
else:
print('Ok! else.')
print()
print("kk")
# 예2
try:
z = 'Cho'
x = name.index(z)
print('{} Found it! {} in name'.format(z, x+1))
except: # 모든 에러를 다 잡는다. 어떤 에러가 발생할지는 모른다
# exception Exception이라고 적을 수도 있음.
print('Not found it! - Occurred ValueError!')
else:
print('Ok! else.')
print()
print("kk")
name = ['Kim', 'Lee', 'Park']
print()
try:
z = 'Cho'
x = name.index(z)
print('{} Found it! {} in name'.format(z, x+1))
except Exception as e:
print(e) # 에러의 내용 출력
print('Not found it! - Occurred ValueError!')
else:
print('Ok! else.')
finally:
print('Ok! finally')
print()
print("kk")
rint()
# 예제 4
# 예외 발생 : raise(직접 발생 시킴)
try:
a = 'Park'
if a == 'Kim':
print('Ok! Pass!')
else:
raise ValueError
except ValueError:
print('Occurred Exception.')
else:
print('Ok. else')
'개발 공부 > Python' 카테고리의 다른 글
프로그래밍 시작하기 : 파이썬 입문 10. 최종 프로젝트 (0) | 2020.07.05 |
---|---|
프로그래밍 시작하기 : 파이썬 입문 8. 기본 함수~9.파일 쓰기 (0) | 2020.07.05 |
프로그래밍 시작하기 : 파이썬 입문 4.흐름 제어~5.파이썬 함수 및 입력 (1) | 2020.07.05 |
프로그래밍 시작하기 : 파이썬 입문 2.완전 기초~3.기초 자료형 (0) | 2020.07.05 |
(new) 프로그래밍 시작하기 : 파이썬 입문 1. 파이썬 시작해봐요. (1) | 2020.07.03 |