第九章读书笔记9.4导入类
#coding:gbk
#9.4.1导入单个类
"""一个用于表示汽车的类"""
#car.py
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):
"""
将里程表设置为指定的值
禁止将里程表读书往回调
"""
if mileage >= self.odometer_reading:
self.odometer_reaidng = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self,miles):
"""将里程表读数增加指定的量"""
self.odometer_reading += miles
#my_car.py
from car import Car
my_new_car = Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
#导入类是一种有效的编程方式。如果在这个程序中包含了正给Car类,它将十分的长。
#通过将这个类移到一个模块中,并导入该模块,依然可以使用其所有功能,但主程序文件变得整洁而易于阅读了
#9.4.2在一个模块中存储多个类
#car.py
#虽然同一个模块中的类之间应存在某种相关性,但可根据需要在一个模块中存储任意数量的类
#my_electric_car.py
from car import ElectricCar
my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
#9.4.3从一个模块导入多个类
from car import Car,ElectricCar
my_beetle = Car('volkswagen','beetle',2016)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
#9.4.4导入整个模块
#my_car.py
import car
my_beetle = car.Car('volkswagen','beetle',2016)
print(my_beetle.get_descriptive_name())
my_tesla = car.ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
#9.4.5导入模块中的所有类
#要导入模块中的每个类,可使用如下语法:
# from module_name import *
##不推荐这种导入方式:1.这种导入方式没有明确地指出你使用了模块中的哪些类 2.会引发名称上的困惑
##需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name.class_name语法来访问类
#9.4.6在一个模块中导入另一个模块
#electric_car.py
from car import Car
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.")
def get_range(self):
"""打印一条消息,指出电瓶的续航里程"""
if self.battery_size == 70:
range =240
elif self.battery_size == 85:
range = 270
message = "This car can go approximately " + str(range)
message += " miles on a full range."
print(message)
class ElectricCar(Car):
"""电动车的独特之处"""
def __init__(self,make,model,year):
"""
初始化父类的属性,再初始化电动汽车所有的属性
"""
super().__init__(make,model,year)
self.battery = Battery()
from car import Car
from electric_car import ElectricCar
my_beetle = Car('volkswagen','beetle',2016)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
#9.4.7自定义工作流程
#一开始应让代码尽可能简单。现金可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移到独立的模块中。
#如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储到模块中。
#先找出让你能够编写出代码的可行方式,再尝试让代码更为组织有序。