노트 3(9.클래스 10.파일 과 이상 11.테스트 코드)

14426 단어 python
제9 장 클래스
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.빈 줄 은 클래스 에서 빈 줄 로 구분 할 수 있 습 니 다.모듈 에 서 는 두 개의 빈 줄 로 클래스 를 구분 할 수 있 습 니 다
  • 표준 라 이브 러 리 의 모듈 과 당신 이 작성 한 모듈 을 동시에 가 져 올 필요 가 있 을 때 표준 라 이브 러 리 모듈 을 가 져 오 는 import 문 구 를 작성 하고 빈 줄 을 추가 한 다음 에 자신 이 작성 한 모듈 을 가 져 오 는 import 문 구 를 작성 합 니 다
  • 9.7 소결
     
    제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 각종 단언 방법
  • assertEqual(a, b)              확인 a==b
  • assertNotEqual(a, b)        확인 a!=b
  • assertTrue(x)                     확인 x 는 True
  • assertFalse(x)                   확인 x 는 False
  • assertIn( item , list )          item 이 list 에 있 는 지 확인 합 니 다
  • assertNotIn( item , list )    item 이 list 에 없 는 지 확인 합 니 다.
        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()

  • 좋은 웹페이지 즐겨찾기