第九章读书笔记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自定义工作流程

#一开始应让代码尽可能简单。现金可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移到独立的模块中。
#如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储到模块中。
#先找出让你能够编写出代码的可行方式,再尝试让代码更为组织有序。