
객체 = 속성 + 기능
객체: 클래스에서 생성
클래스: caass 키워드 + 속성 + 기능(함수)
클래스 생성 = 클래스 이름과 동일한 생성자 호출 → 객체 생성
이때 매개변수 숫자와 일치하는 데이터 삽입
- 생성자 호출 → 자동으로 init 메소드 호출
- 호출 시 데이터를 init 메소드에 할당 ⇒ 초기화 (속성 값 초기화)
- 생성자 호출: class 이름과 동일
객체 생성 시 할당되는 변수
class Calculator: # class 생성
def __init__(self): # 속성
self.num1 = 0
self.num2 = 0
self.result = 0
def add(self): # 기능
self.result = self.num1 + self.num2
return self.result
def sub(self):
self.result = self.num1 - self.num2
return self.result
def mul(self):
self.result = self.num1 * self.num2
return self.result
def div(self):
self.result = self.num1 / self.num2
return self.result
useCal = Calculator() # 객체
useCal.num1 = 50 # 객체 속성값 변경
useCal.num2 = 10
print(useCal.add()) # 호출
print(useCal.sub())
print(useCal.mul())
print(useCal.div())

: 객체 주소를 복사하는 것. 객체 자체가 복사되지는 않는다.
: 객체 자체를 복사하는 것. 또 하나의 객체 생성
클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할 수 있다.
class NormalCal:
def add(self, n1, n2):
return n1 + n2
def sub(self, n1, n2):
return n1 - n2
class CalChild(NormalCal):
def div(self, n1, n2):
return n1 / n2
def mul(self, n1, n2):
return n1 * n2
클래스 옆에 나열하여 활용
다중상속을 다수 사용할 경우, 헷갈릴 경우 있음.
class Car04(Car01, Car02, Car03):
def __init__(self):
pass
상위 클래스의 init 메소드 호출
super() 메소드로 속성 초기화, 사용
# 1번
P_Class.__init__(self, cNum1, cNum2)
# 2번
super().__init__(cNum1,cNum2)
super().기능명()으로 활용 가능

하위 클래스에서 상위 클래스 메서드 재정의

상위 클래스에서 하위 클래스에 메서드 구현 강요
from abc import ABCMeta
from abc import abstractmethod
class AirPlane (metaclass = ABCMeta):
@abstractmethod
def flight(self):
pass
class Airliner(AirPlane):
def flight(self):
print('시속 400km/h 비행!')
class FighterPlane(AirPlane):
def flight(self):
print('시속 1000km/h 비행!')
문법적 문제는 없으나 실행 중 발생하는 예상하지 못한 문제
예외 관련 클래스는 Exception 클래스 상속
ZeroDivision
IOError (입출력)
IndexError (길이)
IndentionError (띄어쓰기 : 파이썬)
ValueError (표시형)
AttributeError (속성)
…
div(1, 0) # ZeroDivision
lists = [1, 2, 3, 4, 5]
print(lists[6]) # IndexError
예외 별도 처리 ⇒ 프로그램 전체 실행에 이슈 없도록 처리
예외 발생 예상 구문: try~except로 감쌈

else~: 예외가 발생하지 않은 경우 실행하는 구문

예외 발생과 상관없이 항상 실행

Exception 클래스 활용하여 예외 확인 가능

강제로 예외 발생
- 사용자 함수 선언 시 if~else~로 raise 객체 삽입
- 함수 사용 시 try~ except~ 형태로 사용
- Exception 클래스 활용하여 예외 확인 시, 사용자 함수에서 raise로 선언했던 기능 출력

raise Exception (B)에 삽입한 문자열(str, int 무관)을 활용해
분기 삽입 가능
raise Exception (B) == e.args [1] (인덱스 활용)

Exception 클래스 상속하여 사용자 예외 클래스 만들기
- 에러가 발생하면 출력되는 에러 메시지 사용자화
텍스트파일
- 열기: open()
- 읽기: read()
- 쓰기: write()
- 닫기: close()
파일 모드는 파일 open 목적 설정
- ‘w’: 쓰기 전용 (파일이 있으면 덮어씌움)
- ‘a’: 쓰기 전용 (파일이 있으면 덧붙임)
- ‘x’: 쓰기 전용 (파일이 있으면 에러 발생)
- ‘r’: 읽기 전용 (파일이 없으면 에러 발생)
w 모드
- 파일이 없으면 생성
- 파일이 있으면 기존 텍스트를 삭제 후 덮어씀
# w = 읽기 모드
file = open('C:/Users/240114_1909.txt', 'w')
strCnt = file.write('Hello World!')
print(f'strCnt: {strCnt}')
file.close()
read() 함수를 이용, 파일 문자열 읽기
# r = 쓰기 모드
file = open('C:/Users/240114_1909.txt', 'r')
str = file.read()
print(f'{str}') # == print(f'{file.read()}')
file.close()
파일 닫기 (file.close()) 생략 가능
- enumerate: 튜플, 리스트, 스트링에 적용.
- 각각의 index 값과 value 값을 enumerate 객체로 리턴
- idx = 인덱스 / num = value 값
with open(url + '240114_2000.txt','a') as f
리스트, 또는 튜플 데이터를 파일에 쓰기 위한 함수
with open (url + '240114_2025_writelines.txt','a') as f:
f.writelines(languages) # 개행 X
f.writelines(item + '\n' for item in languages) # 개행 O
# {} == 딕셔너리 / {key : Value}
scoreDic = {'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
for key in scoreDic.keys():
with open(url + '240114_2034_writelines.txt', 'a') as f:
# value값 호출 시 딕셔너리명[key] 형태로 사용
f.write(key + '\t:' + str(scoreDic[key]) + '\n')
with open(url +'240114_2034_writelines.txt', 'a') as f:
print(scoreDic, file = f) #딕셔너리 자체로 저장
print(scoreList, file = f) #리스트 자체로 저장
파일의 모든 데이터를 읽어서 리스트 형태로 반환
- 눈에 보이지 않는 개행까지 ‘텍스트\n’ 형태로 출력
with open (url + '240114_2043_readlines.txt','r') as f:
print(f.readlines())
print(type(f.readlines()))
▼
['hello python\n', 'hello world\n', 'hello sunday\n', 'hello today']
<class 'list'>
한 행을 읽어서 문자열로 반환
- while문 활용, 한 줄씩 출력
- print 함수 사용 시 개행 2줄씩 (텍스트 뒤쪽 \n & print 개행
scoreDic = {}
with open(url + '240114_2050_readlines.txt','r') as f:
line = f.readline()
while line != '':
# split: 구분자를 설정하면 리스트로 구분
tempList = line.split(':')
# strip: 특정 문자열 삭제
# 딕셔너리명[key[인덱스]] = value[인덱스]
scoreDic[tempList[0]] = int(tempList[1].strip('\n'))
line = f.readline()
print(scoreDic)
