노트 3(9.클래스 10.파일 과 이상 11.테스트 코드)
14426 단어 python
9.1 생 성 및 사용 클래스
9.2 사용 클래스 와 인 스 턴 스
9.2.1 Car 클래스 9.2.2 속성 에 기본 값 지정 9.2.3 속성 값 수정
class Car():
""" """
def __init__(self, make, model, year):
""" """
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 #
def get_descriptive_name(self):
""" """
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
""" """
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
""" """
self.odometer_reading = mileage
# self
# , 。
my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
my_new_car.odometer_reading = 23 #
my_new_car.read_odometer()
my_new_car.update_odometer(100)
my_new_car.read_odometer()
9.3 상속 9.3.1 하위 클래스 의 방법init__() 9.3.2 Python 2.7 의 계승 9.3.3 하위 클래스 에 속성 과 방법 을 정의 합 니 다. 9.3.4 부 류 를 다시 쓰 는 방법 9.3.5 인 스 턴 스 를 속성 으로 사용 합 니 다. 9.3.6 시 뮬 레이 션 실물
car.py
class Battery():
""" """
def __init__(self, battery_size=70):
self.battery_size = battery_size
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
class ElectricCar(Car):
""" """
def __init__(self, make, model, year):
""" """
super().__init__(make, model, year)
self.battery_size = 70
self.battery = Battery() #
#python2.7
# object
#class Car(object):
#super(ElectricCar, self).__init__(make, model, year)
def describe_battery(self):
print("This Eclectric car has a " + str(self.battery_size) + "_kWh battery.")
#
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model + ' ' + str(self.battery_size) + 'kwh'
return long_name.title()
# Battery , , , ElectricCar
# 。 Battery
my_tesla = ElectricCar('tesla', 'model s', 2019)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
my_tesla.battery.describe_battery()
9.4 가 져 오기 클래스 9.4.1 단일 클래스 가 져 오기
from car import Car
my_new_car = Car('audi', 'a4', 2018)
print(my_new_car.get_descriptive_name())
my_new_car.odemeter_reading = 23
my_new_car.read_odometer()
9.4.2 한 모듈 에 여러 종 류 를 저장 합 니 다.
from car import ElectricCar
my_tesla = ElectricCar('tesla', 'model s', 2016)
my_tesla.battery.describe_battery()
9.4.3 한 모듈 에서 여러 종 류 를 가 져 옵 니 다.
from car import Car, ElectricCar
my_beetle = Car('volkswagen', 'beetle', 2016)
my_tesla = ElectricCar('tesla', 'roadster', 2016)
9.4.4 전체 모듈 가 져 오기
import car
my_beetle = car.Car('volkswagen', 'beetle', 2016) 5
my_tesla = car.ElectricCar('tesla', 'roadster', 2016)
9.4.5 모듈 의 모든 클래스 가 져 오기
from module_name import *
추천 하지 않 습 니 다.도입 류 가 명확 하지 않 고 동명 의 문제 가 있 을 수 있 습 니 다.
한 모듈 에서 여러 종 류 를 가 져 올 때 전체 모듈 을 가 져 오고 module 을 사용 하 는 것 이 좋 습 니 다.name.class_name 문법 접근 클래스
9.4.6 한 모듈 에서 다른 모듈 가 져 오기
#electric_car.py
from car import Car
class Battery():
-- snip --
class ElectricCar(Car):
-- snip --
#my_car.py
from car import Car # Car
from electric_car import ElectricCar # car
my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())
9.4.7 사용자 정의 작업 절차
9.5 Python 표준 라 이브 러 리
사전 을 만 들 고 키-값 쌍 의 추가 순 서 를 기록 합 니 다.모듈 collections 의 OrderedDict 류 를 사용 할 수 있 습 니 다.
from collections import OrderedDict
favorite_languages = OrderedDict()
favorite_languages['jen'] = 'python'
favorite_languages['sarah'] = 'C'
favorite_languages['edward'] = 'ruby'
favorite_languages['phih'] = 'python'
for name, language in favorite_languages.items():
print(name.title() + "'s favorite language is " + language.title() + '.')
9.6 클래스 인 코딩 스타일
4.567917.유형 명 은 낙타 봉 의 명명 법 을 사용 해 야 한다4.567917.인 스 턴 스 이름과 모듈 명 은 모두 소문 자 형식 을 사용 하고 단어 사이 에 밑줄 을 친다4.567917.모든 클래스 에 대해 클래스 정의 뒤에 문서 문자열 을 포함 하고 그 중의 클래스 가 무엇 을 할 수 있 는 지 설명 해 야 합 니 다4.567917.빈 줄 은 클래스 에서 빈 줄 로 구분 할 수 있 습 니 다.모듈 에 서 는 두 개의 빈 줄 로 클래스 를 구분 할 수 있 습 니 다
제10 장 파일 과 이상
10.1 파일 에서 데이터 읽 기
10.1.1 전체 파일 읽 기
with open('pi_digit.txt') as file_object: # with
contents = file_object.read()
print(contents)
10.1.2 파일 경로
linux ------ with open('text_files/ filename .txt') as file_object:
윈도 우즈 백 슬 래 쉬-WIth open('textfiles\ filename .txt') as file_object: 10.1.3 한 줄 씩 읽 기
with open('pi_digit.txt') as file_object:
for line in file_object:
print(line.restrip()) #restrip ,
10.1.4 파일 각 줄 의 내용 을 포함 하 는 목록 만 들 기
filename = 'pi_digit.txt'
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
10.1.5 파일 내용 사용 10.1.6 백만 비트 의 대형 파일 포함
filename = 'pi_million_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
pi_string = ''
for line in lines:
pi_string += line.strip()
print(pi_string[:52] + "...")
print(len(pi_string))
10.1.7 원주율 에 생일 이 포함 되 어 있 습 니까?
10.2 파일 쓰기
10.2.1 빈 파일 쓰기 10.2.2 여러 줄 쓰기
# r, w, a ,r+
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming.")
file_object.write("I love creating new games.")
10.2.3 파일 에 추가
파일 에 내용 을 추가 하려 면 기 존 내용 을 덮어 쓰 지 않 고 추가 모드 로 파일 을 열 수 있 습 니 다.
open(filename, 'a')
10.3 이상
10.3.1 ZeroDivisionError 이상 처리 10.3.2 try-except 코드 블록 사용 10.3.3 이상 사용 시 충돌 방지 10.3.4 else 코드 블록
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
first_number = input('
First number: ')
if first_number == 'q':
break
second_number = input("Second number:")
if second_number == 'q':
break
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer)
10.3.5 처리 FileNotFoundError 이상 10.3.6 텍스트 split 함 수 를 분석 하고 텍스트 를 분할 하여 목록 으로 저장 합 니 다. 10.3.7 여러 파일 사용
def count_words(filename):
""" """
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg = "Sorry, the file " + filename + "dost not exist."
print(msg)
else:
#
words = contents.split()
num_words = len(words)
print("The file " + filename + " has about " + str(num_words) + " words.")
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
count_words(filename)
# try-except : traceback;
#
10.3.8 실패 시 한 마디 도 하지 않 는 다 pass
try:
--snip--
except FileNotFoundError:
pass
10.3.9 어떤 오 류 를 보고 할 지 결정
사용자 가 입력 하고 지정 한 파일 이 존재 하 며 네트워크 링크 가 있 으 면 이상 이 발생 할 수 있 습 니 다.
사용자 와 잘못된 정 보 를 공유 하 는 정 도 를 제어 합 니 다.
10.4 메모리 데이터
모듈 json 은 간단 한 Python 데이터 구 조 를 파일 에 저장 하고 프로그램 이 다시 실 행 될 때 이 파일 의 데 이 터 를 불 러 올 수 있 도록 합 니 다.
10.4.1 json.dump()와 json.load()를 사용 합 니 다.
import json
numbers = [2,3,5,7,11,13]
#wirte
with open('numbers.json', 'w') as f_obj:
json.dump(numbers, f_obj)
#read
with open('numbers.json') as f_obj:
numberlist = json.load(f_obj)
print(numberlist)
10.4.2 사용자 가 생 성 한 데 이 터 를 저장 하고 읽 습 니 다. 10.4.3 재 구성
import json
# ,
# ,
def get_stored_username():
""" , """
filename = 'username.json'
try:
with open(filename) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
return None
else:
return username
def get_new_username():
""" """
username = input("What is your name? ")
filename = 'username.json'
with open(filename, 'w') as f_obj:
json.dump(username, f_obj)
return username
def greet_user():
""" , """
filename = 'username.json'
username = get_stored_username()
if username:
print("Welcome back, " + username + "!")
else:
username = get_new_username()
print("We'll remember you when you come back," + username)
greet_user()
제1 1 장 테스트 코드
11.1 테스트 함수
11.1.1 단원 테스트 와 테스트 용례 11.1.2 통과 가능 한 테스트 11.1.3 통과 할 수 없 는 테스트 11.1.4 테스트 미 통과 시 어떻게 11.1.5 새로운 테스트 추가
Python 모듈 unittest 의 도 구 를 사용 하여 코드 를 테스트 합 니 다.
함수 에 테스트 용례 를 작성 하려 면 모듈 unittest 와 테스트 할 함 수 를 먼저 가 져 올 수 있 습 니 다.
유닛 test.TestCase 를 계승 하 는 클래스 를 만 들 고 함수 행동 의 다른 측면 을 테스트 하 는 일련의 방법 을 작성 합 니 다.
name_function.py
def get_formatted_name(first, last, middle=''):
"""Generate a neatly formatted full name."""
if middle:
full_name = first + ' ' + middle + ' '+ last
else:
full_name = first + ' ' + last
return full_name.title()
test_name_ function.py
import unittest
from name_function import get_formatted_name
class NameTestCase(unittest.TestCase):
"""test name_function.py"""
def test_first_last_name(self):
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
def test_first_last_middle_name(self):
formatted_name = get_formatted_name('wolfgang', 'mozart', 'amadeus')
self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')
unittest.main()
11.2 테스트 클래스
11.2.1 각종 단언 방법
11.2.2 테스트 할 클래스 11.2.3 테스트 AnonymousSurvey 클래스 11.2.4 방법 setUp()
setUp()방법 에서 일련의 인 스 턴 스 를 만 들 고 속성 을 설정 한 다음 테스트 방법 에서 이 인 스 턴 스 를 직접 사용 할 수 있 습 니 다.모든 테스트 방법 에서 인 스 턴 스 를 만 들 고 속성 을 설정 하 는 것 보다 훨씬 쉽다.
survey.py
class AnonymousSurvey():
""" """
def __init__(self, question):
""" , """
self.question = question
self.responses = []
def show_question(self):
""" """
print(self.question)
def store_response(self, new_response):
""" """
self.responses.append(new_response)
def show_results(self):
""" """
print("Survey results:")
for response in self.responses:
print('- ' + response)
test_survey.py
import unittest
from survey import AnonymousSurvey
class TestAnonmyousSurvey(unittest.TestCase):
"""test for class anonymousSurvey"""
# TestCase setUp() ,Python , test_ 。
def setUp(self):
"""
,
"""
question = "What language did you first learn to speak?"
self.my_survey = AnonymousSurvey(question)
self.responses = ['English', 'Spanish', 'Mandarin']
def test_store_sinlge_response(self):
""" """
question = "What language did you first learn to speak?"
self.my_survey.store_response(self.responses[0])
self.assertIn(self.responses[0], self.my_survey.responses)
def test_store_three_responses(self):
""" """
for response in self.responses:
self.my_survey.store_response(response)
for response in self.responses:
self.assertIn(response, self.my_survey.responses)
unittest.main()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.