Python 10일차

조영훈·2024년 8월 14일

Python

목록 보기
10/16
post-thumbnail

추상 클래스, 예외 처리, 파일 입출력 정리


1. 추상 클래스 (Abstract Class)

추상 클래스란?

추상 클래스는 설계 목적의 클래스로 객체를 생성할 수 없고, 반드시 하위 클래스에서 구현해야 하는 추상 메서드를 포함해야 한다.

추상 클래스 예제 ✍️

from abc import ABCMeta, abstractmethod

# 추상 클래스 정의
class Friend(metaclass=ABCMeta):
    def __init__(self, name):
        self.name = name  # 동적 멤버 변수 name 추가

    @abstractmethod
    def hobby(self):
        pass  # 추상 메서드로, 하위 클래스에서 반드시 구현해야 함

    def printName(self):
        print('name:', self.name)  # 이름 출력 메서드

# 추상 클래스를 상속받는 구체 클래스 Tom
class Tom(Friend):
    def __init__(self, name, addr):
        super().__init__(name)  # 부모 클래스의 생성자를 호출하여 name 초기화
        self.addr = addr  # 추가적인 동적 멤버 변수 addr

    def hobby(self):
        print(self.addr + ' 거리를 걸어다님!')  # 추상 메서드 hobby를 구현

    def printAddr(self):
        print('Tom addr:', self.addr)  # 주소 출력 메서드

# 추상 클래스를 상속받는 또 다른 구체 클래스 James
class James(Friend):
    def __init__(self, name, addr):
        super().__init__(name)  # 부모 클래스의 생성자를 호출하여 name 초기화
        self.addr = addr  # 추가적인 동적 멤버 변수 addr

    def hobby(self):
        print(self.addr + ' 거리를 뛰어다님!')  # 추상 메서드 hobby를 구현

    def printAddr(self):
        print('James addr:', self.addr)  # 주소 출력 메서드

# 객체 생성 및 메서드 호출
tom = Tom("톰", "종로")
tom.printName()  # name: 톰 출력
tom.printAddr()  # Tom addr: 종로 출력
tom.hobby()      # 종로 거리를 걸어다님! 출력

print()  # 줄 바꿈

james = James("제임스", "강남")
james.printName()  # name: 제임스 출력
james.printAddr()  # James addr: 강남 출력
james.hobby()      # 강남 거리를 뛰어다님! 출력



2. 예외 처리 (Exception Handling)

예외 처리란?

예외 처리란 프로그램 실행 중 발생할 수 있는 오류에 대해 적절한 대응을 하는 것을 말한다. 파이썬에서는 try-except 구문을 사용한다.

예외 처리 예제 ✍️

# 두 수를 나누는 함수 정의
def divide(a, b):
    return a / b  # 0으로 나누면 예외 발생

print('프로그램 시작')

try:
    # 예외가 발생할 가능성이 있는 코드
    c = divide(5, 0)  # 0으로 나누기 때문에 ZeroDivisionError 발생
except ZeroDivisionError:
    print("두번째 값은 0이면 안됩니다.")  # 0으로 나누었을 때 처리
except FileNotFoundError:
    print("불러올 파일이 없습니다.")  # 파일이 없을 때 처리
except Exception as e:
    print("에러가 발생:", e)  # 그 외의 모든 예외 처리
finally:
    print('에러 유무와 상관없이 무조건 수행됨')  # 예외 발생 여부와 상관없이 실행되는 블록

print('프로그램 종료')  # 프로그램 종료 메시지 출력

정리 📑

  • try 블록 안에서 오류가 발생할 가능성이 있는 코드를 작성
  • except 블록에서 발생한 오류를 처리
  • finally 블록은 오류 발생 여부와 관계없이 항상 실행된다.



3. 파일 입출력 (File I/O)

파일 입출력 (File I/O)

Python에서는 파일을 생성, 읽기, 쓰기, 그리고 복합 객체를 파일로 저장하거나 불러올 수 있다. 이 과정에서 with 구문을 사용하면 파일을 자동으로 닫을 수 있다.

파일 생성 및 내용 저장 ✍️

import os

try:
    # 파일 열기 (쓰기 모드)
    with open(os.getcwd() + r'\ftest.txt', mode='w') as f:
        f.write('My friend!\n')  
        f.write('Have a good time!\n')  
        f.write('hello~\n')  
        # with 블록 종료 시 자동으로 파일이 닫힙니다.
except Exception as e:
    print('파일 처리 에러:', e)  # 예외 발생 시 메시지 출력

파일 읽기 ✍️

try:
    # 파일 열기 (읽기 모드)
    with open(os.getcwd() + r'\ftest.txt', mode='r') as f:
        content = f.read()  # 파일의 모든 내용 읽기
        print(content)  # 읽은 내용 출력
except Exception as e:
    print('파일 처리 에러:', e)  # 예외 발생 시 메시지 출력

복합 객체 저장 및 읽기 (Pickle) ✍️

import pickle

try:
    phones = {'tom': '111-1111', '길동': '222-2333'}  # 전화번호 딕셔너리
    li = ['마우스', '키보드']  # 장비 리스트
    t = (phones, li)  # 복합 객체 (튜플)

    # pickle을 이용하여 객체를 바이너리 파일로 저장
    with open('test.pickle', 'wb') as f:
        pickle.dump(t, f)  # 복합 객체 저장

    # 저장된 바이너리 파일을 읽어오기
    with open('test.pickle', 'rb') as f:
        a, b = pickle.load(f)  # 저장된 객체 복원
        print(a)  
        print(b)  
except Exception as e:
    print('에러 발생:', e)  # 예외 발생 시 메시지 출력
profile
개발 꿈나무

0개의 댓글