# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:2022/11/20
form:《Python编程从入门到实践》
"""
9.4.1 从模块中导入类
随着你不断地给类添加功能,文件可能变得很长,即便你妥善地使用了继承亦如此。为遵循
Python
的总体理念,应让文件尽可能整洁。为在这方面提供帮助,
Python
允许你将类存储在模块
中,然后在主程序中导入所需的模块。
下面来创建一个包含Car、
Battery
和
ElectricCar类的模块
# 一个可用于表示汽车的类
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_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
"""将里程表读数增加指定的量"""
self.odometer_reading += miles
class Battery:
"""一次模拟电动汽车电瓶的简单尝试"""
def __init__(self, battery_size=60):
"""初始化电瓶的属性"""
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 charge."
print(message)
class ElectricCar(Car):
"""模拟电动汽车的独特之处"""
def __init__(self, make, model, year):
"""
初始化父类的属性,再初始化电动汽车特有的属性
"""
super().__init__(make, model, year)
self.battery = Battery()
9.4.2 导入模块中的类
from car import Car, ElectricCar
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
9.4.3 导入整个模块
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.4 导入模块中的所有类
from module_name import *
不推荐使用这种导入方式 这种导入方式没有明确地指出你使用了模块中的哪些类。 还可能引发名称方面的困惑。如果你不小心导入了一个与程序文件中其 他模块同名的类,将引发难以诊断的错误。 需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name.class_name语法来访问类。 小结: 类的导入跟函数的导入使用方法一样,详细可以参考《函数_导入模块和编写指南》