다중 상속 / 함수 / 예외처리 / 파일 읽고 쓰기
2022. 10. 9. 12:32ㆍDev.Program/Python & R
728x90
< 다중 상속 >
# 다중상속 class Tiger: def jump(self): print("호랑이 점프!") class Lion: def bite(self): print("사자 꿀꺽!") class Liger(Tiger, Lion): def play(self): print("라이거 놀기!") def jump(self): print("라이거 점프!") li = Liger() li.play() li.jump() li.bite() |
- play() 와 jump() 는 재정의했기 때문에 재정의한 것이 나오고, bite는 재정의 안해서 부모의 bite() 그대로 나옴!
- 이렇게 다중상속이 가능하다!
< 인스턴스 함수 >
# 인스턴스 self.변수 인스턴스 함수(self) # 객체생성없이 사용할 수 있는 클래스 변수, 클래스 함수 class Car: count = 0 # 클래스 변수 def __init__(self, color): self.color = color # 인스턴스 변수 # 클래스 변수 : 객체 생성 없이 사용하는 변수, 클래스 정의 때 기억장소 할당 Car.count = Car.count + 1 # 인스턴스 함수 def move(self): print(self.color, "차가 움직인다") c1 = Car("노랑") print(c1.color) # 인스턴스 변수 :객체 생성 시 기억장소 할당 print(c1.count) # 결과 1 , 클래스 변수 : 클래스 정의 때 기억장소 할당 print(Car.count) c1.move() # Car.move() 에러 c2 = Car("핑크") print(c2.color) print(c2.count) # 결과 2 (count 누적) print(Car.count) c2.move() |
- 인스턴스 생성될 때 count 값 누적!
- (self) 붙은 게 인스턴스 함수!
< Static 함수 >
- 이렇게만 하면 에러남!
- 어노테이션 붙여줘야함!
# 스태틱 함수 호출class Car:
count = 0 # 클래스 변수
def __init__(self, color):
self.color = color # 인스턴스 변수
# 클래스 변수 : 객체 생성 없이 사용하는 변수, 클래스 정의 때 기억장소 할당
Car.count = Car.count + 1
# 인스턴스 함수
def move(self):
print(self.color, "차가 움직인다")
# static 함수
@staticmethod
def check():
print("static 함수!")
# 클래스 함수
@classmethod
def check2(cls):
print(Car.count, "클래스 메서드!")
- 추가해주고 호출하면
- 출력됨!
< 클래스 함수 >
- 이렇게 하면 오류남!
- 어노테이션과 cls 적어야 오류 사라짐!
- self. 도 오류남!
class Car: count = 0 # 클래스 변수 def __init__(self, color): self.color = color # 인스턴스 변수 # 클래스 변수 : 객체 생성 없이 사용하는 변수, 클래스 정의 때 기억장소 할당 Car.count = Car.count + 1 # 인스턴스 함수 def move(self): print(self.color, "차가 움직인다") # static 함수 @staticmethod def check(): print("static 함수!") # 클래스 함수 @classmethod def check2(cls): print(Car.count, "클래스 메서드!") # 클래스 함수 호출 Car.check2() |
- 추가!
- 출력된다!
======== test6,py
< 예외 처리 >
> 수동으로 하는 방법
print("프로그램 시작") a = 4 b = 0 if b!=0: print(a/b) else: print("0으로 나눔!") print("프로그램 끝!") |
- 이렇게 예외 부분을 따로 설정해줌
> 파이썬의 예외처리 사용
- Error 구문들이 싹 나온다
- try~catch 가 아니라 try~except
print("프로그램 시작1") try: #예외 발생구문 print(a/b) except ZeroDivisionError as e: print(e) finally: print("예외발생 상관없이 마무리 작업") print("프로그램 끝2") |
- 예외 발생 한 이유 나온다!
a = [1, 2, 3] try: print(a[3]) except IndexError as e: print(e) finally: print("생략가능") |
< 오류 회피 >
# 오류발생 -> 회피(오류메세지 없이 그냥 지나침) pass try: f = open("없는 파일", 'r') except FileNotFoundError as e: # print(e) # 예외 회피 pass finally: print("생략 가능") |
- pass 가 없을 때(print(e)
- pass 로 오류회피 했을 때
< 오류 일부러 발생 시키기 >
# 오류 일부러 발생 class Bird: def fly(self): raise NotImplementedError # Bird 클래스 객체 생성 b = Bird() b.fly() |
- 에러메세지 나옴!
> 메서드 재정의 하면 오류 사라짐!
class Eagle(Bird): def fly(self): print("Bird 클래스의 fly() 메서드 오버라이딩!") e = Eagle() e.fly() |
- 출력창
======== test7.py
< 파일 읽고 쓰기 >
for i in range(1, 11, 1): data = "%d 번째\n" %i print(data) |
# p171 # 파일 읽고 쓰기 # 파일 사용하기 위한 객체 생성 # 변수 = open("파일이름", "모드") # 모드 w 파일 내용쓸 때 r 파일 읽을 때 a 새로운 내용 추가 # f = open("파일.txt", "w") # f.write() 함수호출 f.read() f.readline() f.readlines() # f.close() f = open("filetest.txt", 'w') for i in range(1, 11, 1): data = "%d 번째\n" %i print(data) # 화면에 출력 f.write(data) # 파일에 쓰기 f.close() |
- 같은 경로에 파일 생성됨
- D:\workspace_py\py1 경로 찾아가면
- 이렇게 만들어져있다!
> 경로 설정 후 파일 만들기
# D:\workspace_py\py1/filetest2.txt f2 = open("D:\workspace_py\py1/filetest2.txt", 'w') for i in range(11, 21, 1): data = "%d 번째\n" % i print(data) # 화면에 출력 f2.write(data) # 파일에 쓰기 f2.close() |
- 설정한 경로에 파일 만들어짐
> ‘w’ write 는 계속 덮어쓰기
> ‘a’ append 는 내용 추가
f = open("filetest.txt", 'a') for i in range(11, 21, 1): data = "%d 번째\n" %i print(data) # 화면에 출력 f.write(data) # 파일에 쓰기 f.close() |
- ‘a’ 로만 바꿔줌
- 추가된다!
> ‘r’ 읽어오기
> readline() 한 줄 읽어오기
# filetest.txt 내용 읽어오기 f4 = open("filetest.txt", "r") line = f4.readline() print(line) |
- 한 줄만 읽어옴!
# filetest.txt 내용 읽어오기 f4 = open("filetest.txt", "r") # line = f4.readline() # 한 줄 읽어오기 # print(line) while True: line = f4.readline() if not line: break print(line) f4.close() |
- 라인이 없으면 break 로 빠져나오고, 있으면 반복문을 통해 계속 print() 해줌
- 출력됨
> readlines() 한 줄 씩 전체 출력하기
f5 = open("filetest2.txt", "r") lines = f5.readlines() print(lines) |
- 리스트 형태로 받아와짐
f5 = open("filetest2.txt", "r") lines = f5.readlines() # print(lines) for l in lines: print(l) |
- for 문을 통해 리스트 뽑아옴
> read() 왕창 가져와서 전체 출력하기
f6 = open("filetest.txt", "r") data = f6.read() print(data) f6.close() |
- 띄어쓰기가 없음! 왕창가져와서 한 번에 출력하기 때문!
728x90
'Dev.Program > Python & R' 카테고리의 다른 글
1차원 테이블 / 2차원 테이블 (0) | 2022.10.09 |
---|---|
함수 Import 방법 / 외장함수 (0) | 2022.10.09 |
클래스 (0) | 2022.10.09 |
반복문(while,for) / 일반함수 / 람다 / map (1) | 2022.10.08 |
출력 / 리스트 / 튜플 / 딕셔너리 (0) | 2022.10.08 |