<내용정리>
- 관련 파일
- 본문
# 섹션14 p254 예제1
while True:
filename = input('복사할 파일명을 입력하세요 >>>')
extname = filename[filename.rfind('.') + 1:] # 확장자를 추출
if extname != 'txt':
print('복사할 수 없는 파일입니다')
else:
break
with open(filename, 'rt') as source:
with open('복사본-' + filename, 'wt') as copy:
while True:
buffer = source.read(1) # 1바이트씩 읽어 buffer에 담는다
if not buffer:
break
copy.write(buffer)
print(f'복사본-{filename}파일이 생성되었습니다.')
# 예제2
import csv
with open('Section14/cctv.csv', 'r') as csvfile:
buffer = csv.reader(csvfile, delimiter=',', quotechar='"')
totalcctv = 0 # cctv 개수
for i, line in enumerate(buffer):
if i != 0: # 제목 줄이 아니라면
totalcctv += int(line[4])
print(f'대구광역시 달서구에 설치된 cctv는 총 {totalcctv}대입니다')
# 예제3
import json
with open('Section14/cctv.json', 'r', encoding='utf-8') as jsonfile:
buffer = jsonfile.read()
cctv_list = json.loads(buffer) # 파이썬으로 변환
cctv_purpose = set() # 결과를 담을 빈 set 생성
for place in cctv_list:
cctv_purpose.add(place['설치목적구분']) # set에 추가
print(cctv_purpose)
# p267 예제
class Computer:
def set_spec(self, cpu, ram, vga, ssd):
self.cpu = cpu
self.ram = ram
self.vga = vga
self.ssd = ssd
def hardware_info(self):
print(f'CPU = {self.cpu}')
print(f'RAM = {self.ram}')
print(f'VGA = {self.vga}')
print(f'SSD = {self.ssd}')
desktop = Computer()
desktop.set_spec('i7', '16GB', 'GTX1060', '512GB')
desktop.hardware_info()
print()
notebook = Computer()
notebook.set_spec('i5', '8GB', 'MX300', '256GB')
notebook.hardware_info()
# p269 예제
class Calculator:
def input_expr(self):
expr = input('수식을 입력하세요 >>> ')
self.expr = expr
def calculate(self):
return eval(self.expr) # eval : 문자열로 입력 받은 수식을 계산
calc = Calculator()
calc.input_expr()
print(f'{calc.calculate()}')
### 섹션16 클래스와 객체2
## 생성자와 소멸자
# 생성자
객체에서 초깃값을 설정해야 할 필요가 있을 때 사용
객체가 생성될 떄 자동으로 호출해주는 메서드
__init__ 사용
스페셜메서드(매직메서드) : 파이썬에서 자동을 호출해주는 메서드
앞뒤로 __가 붙은 메서드
<형식>
class 클래스이름:
def __init__(self):
self.속성 = 값
# ex)
class Candy1:
def set_info(self, shape, color):
self.shape = shape
self.color = color
candy1 = Candy1()
candy1.set_info('circle', 'yellow')
print(candy1.shape, candy1.color, sep=', ')
# ex) 생성자 사용
class Candy2:
def __init__(self, shape, color):
self.shape = shape
self.color = color
candy2 = Candy2('circle', 'blue')
print(candy2.shape, candy2.color, sep=', ')
# p276
class USB:
def __init__(self, capacity):
self.capacity = capacity
def info(self):
print(f'{self.capacity}GB USB')
usb = USB(256) # 인스턴스 생성
usb.info() # 인스턴스 메서드 호출
# p277
class Service:
def __init__(self, service):
self.service = service
print(f'{self.service} Service가 시작되었습니다')
def __del__(self):
print(f'{self.service} Service가 종료되었습니다')
sv = Service('네비게이션')
del sv
## 클래스 변수
클래스 안에서 공간이 할당된 변수
여러 인스턴스 안에서 클래스 변수 공간을 함께 사용
# ex)
class Car:
count = 0
def __init__(self, name, speed):
self.name = name
self.speed = speed
Car.count += 1 # 클래스 변수에 1씩 증가
my = Car('sonata', 0)
print(f'{my.name}의 현재 속도는 {my.speed}km, 생산된 자동차 수 {Car.count}대')
you = Car('santafe', 30)
print(f'{you.name}의 현재 속도는 {you.speed}km, 생산된 자동차 수 {Car.count}대')
## 클래스 메서드
1. 인스턴스 또는 클래스로 호출
2. 생선된 인스턴스가 없어도 호출 가능**
3. @classmethod 데코레이터를 표시하고 작성
4. 매개변수 self를 사용하지 않고 cls를 사용
# ex)
class Korean:
country = '한국'
@classmethod
def trip(cls, country):
if cls.country == country:
print('국내여행!')
else:
print('해외여행!')
Korean.trip('한국') # 객체없이 호출 가능
Korean.trip('미국')
# p270 1
class Book:
def set_info(self, title, author):
self.title = title
self.author = author
def print_info(self):
print(f'책 제목: {self.title}')
print(f'책 저자: {self.author}')
book1 = Book()
book2 = Book()
book1.set_info('파이썬', '민경태')
book2.set_info('어린왕자', '생텍쥐페리')
book_list = [book1, book2]
for book in book_list:
book.print_info()
'학부 자료 > Python' 카테고리의 다른 글
[Python] 파이썬 기초 15/20, 클래스 상속, 예외처리 2(강제로 예외 발생)-raise 예제 (4) | 2023.11.07 |
---|---|
[Python] 파이썬 기초 14/20, 클래스 상속, 예외처리 (1) | 2023.11.07 |
[Python] 파이썬 기초 12/20, 파일 입출력의 활용 (1) | 2023.11.07 |
[Python] 파이썬 기초 11/20, 모듈, 파일 입출력 (2) | 2023.11.07 |
[Python] 파이썬 기초 10/20, 람다 표현식(lambda expression) (0) | 2023.11.07 |