파이썬 중급 - class, 텍스트 파일

subinii·2024년 3월 19일

DS 25기

목록 보기
6/46

객체지향 프로그래밍

객체지향 프로그래밍 : 객체를 이용한 프로그램으로, 객체는 속성과 기능으로 구성된다.

객체 (object) = 속성(attribute) + 기능(function)
객체 만들기 (생성) : 객체는 클래스(class)에서 생성된다.
객체 사용의 장점 : 코드 재사용, 모듈화에 좋다.

  • 객체 만들기

    • 클래스 : class 키워드와 속성(변수) 그리고 기능(함수)를 이용해서 만든다. (클래서 선언시 첫 글자 대문자로 시작 )
  • 객체 생성

    • 객체는 클래스의 생성자를 호출한다.
    • 객체 속성 변경 (변경 가능)
  • 객체 복사에 대한 이해

  1. 얕은 복사 : 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않는다.
    - 객체가 가지고 있는 메모리를 카피 (하나의 객체 공유)
  2. 깊은 복사 : 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어진다.
    - 객체가 하나 더 생성되기에 또 다른 객체가 생성
#원본은 유지하고 객체 복사하는 방법
import copy

scores = [9, 8, 7, 6, 10]
scoresCopy = []

ex1)
scoresCopy = scores
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

ex2)
for s in scores:
    scoresCopy.append(s)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

ex3)
scoresCopy.extend(scores)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

ex4)
scoresCopy = scores.copy()
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

ex5)
scoresCopy = scores[:]
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
  • 상속 : 클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할 수 있다.
    • 다중 상속 : 2개 이상의 클래스를 상속한다. (나열 - 상속된 클래스 기능 사용 가능 )
  • 생성자 생성자 : 객체가 생성될 때 생성자를 호출하면 ‘__init__()’가 자동 호출된다. => ‘__init__()’가 속성을 초기화 한다.
- 속성 초기화하여 사용 방법
P_Class.__init__(self, cNum1, cNum2)
super().__init__(cNum1, cNum2) 

class

  • 오버라이딩 : 하위 클래스에서 상위 클래스의 메서드를 재정의(override)한다.

  • 추상 클래스 : 상위 클래스에서 하위 클래스에 매서드 구현을 강요한다.

  • 예외 : 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제이다.

    • 예외 관련 클래스는 Exception 클래스를 상속한다.
  • 예외 처리 : 예상하지 못한 예외가 프로그램 전체 실행에 영향이 없도록 처리함

    • try ~ except : 예외 발생 예상 구문을 try ~ except로 감싼다.
    • try ~ except ~ else : 예외가 발생하지 않은 경우 실행하는 구문이다.
    • finally : 예외 발생과 상관없이 항상 실행한다.
  • Exception는 예외를 담당하는 클래스이다.

except Exception as e:
    print(f'exception : {e}')
  • raise 키워드를 이용하면 예외를 발생시킬 수 있다.

  • 사용자 예외 클래스 : Exception 클래스를 상속해서 사용자 예외 클래스를 만들 수 있다.

텍스트 파일 (외부 자원)

  • 기본 함수
    • open() - 파일 열기
    • read(), write() - 읽기, 쓰기
    • close() - 파일 닫기
  • 파일 쓰기 - write()
file = open('C:/pythonTxt/test.txt', 'w')
strCnt = file.write('hello!')
print(f'strCnt: {strCnt}')
file.close()
  • 파일 읽기 - read()
file = open('C:/pythonTxt/test.txt', 'r')
str = file.read()
print(f'str: {str}')
file.close()
  • 파일 모드 : 파일을 어떤 목적으로 open 할지 정한다.
    • ‘w’ : 쓰기 전용 (파일이 있으면 덮어씌움)
    • ‘a’ : 쓰기 전용 (파일이 있으면 덧붙임)
    • ‘x’ : 쓰기 전용 (파일이 있으면 에러 발생)
    • ‘r’ : 읽기 전용 (파일이 없으면 에러 발생)
  • with ~ as 문을 이용하면 파일 닫기(close) 생략할 수 있다.
with open(uri + '5_037.txt', 'a') as f:
  • wirtelines() : 리스트(list) 또는 튜플 데이터를 파일에 쓰기 위한 함수이다.
with open(uri + 'languages.txt', 'a') as f:
     f.writelines(item + '\n' for item in languages)
  • readlines() : 파일의 모든 데이터를 읽어서 리스트 형태로 반환한다.
  • readline() : 한 행을 읽어서 문자열로 반환한다.

함수 요약

  • ‘__init__()’ : 객체를 초기화하는데 사용
  • copy() : 실제 객체를 복사해 생성된 객체에 사용
  • pop() : 리스트의 맨 마지막 원소를 리턴하고 해당 원소는 삭제한다.
  • enumerate() : 인덱스와 값을 동시에 접근하면서 루프로 돌리고 싶을 때 사용
  • id() : 저장된 메모리 주소를 반환한다.
  • super() : 부모클래스의 임시적인 객체를 반환하여 부모클래스의 메소드를 사용할 수 있게 하는 메소드
  • append() : 리스트의 끝에 새로운 요소를 추가하는 메소드
  • encoding='UTF8' : 파일이 안열릴때
  • replace() : 문자열을 변경하는 함수, 문자열 안에 특정 문자를 새로운 문자로 변경하는 기능을 가짐
  • split() : 문자열을 분리하고 싶을 때 사용

“이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.”

profile
데이터 공부 기록

0개의 댓글