#4.导入类
python允许将类存储在模块u中,然后早主程序中导入所需的模块。
4.1 导入单个类
将Motor类存储于motor.py文件中,使用import语句导入。
class Motor: ##将以下类的定义存储于motor.py文件中
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 = f"{self.year} {self.make} {self.model}"
return long_name.title()
def read_odometer(self):
print(f"This boat has {self.odometer_reading} on it.")
def update_odometer(self, miles): ##使用方法修改里程
if miles >= self.odometer_reading: ##如果传入的里程大于原里程
self.odometer_reading = miles ##对里程进行修改
else: # 否则打印警告信息“不准回调里程表”
print("You can't roll the odometer back.")
def increment_odometer(self, miles):
if miles >= 0:
self.odometer_reading += miles
else:
print("You can't roll the odometer back.")
"""通过impor语句进行导入"""
from motor import Motor
my_yadi_motor = Motor('yadi', 'M6', 2019)
print(my_yadi_motor.get_descriptive_name())
my_yadi_motor.odometer_reading = 10
my_yadi_motor.read_odometer()
2019 Yadi M6
This motor has 10 on it.
4.2 在一个模块中存储多个类
一个模块中的类应该彼此具备一定的关联性,但可以根据需要在一个模块中存储任意数量的类。
在以上模块(motor.py)中增加 ELectricMotor和Battery类的代码。
class Battery:
def __init__(self, battery_size=90):
self.battery_size = battery_size
def describe_battery(self):
print(f"The Motor has a {self.battery_size}-kwh battery.")
def get_range(self, battery_size):
"""打印一条消息,指出点评的续航里程"""
range = battery_size * 0.75
print(f"This motor can go about {range} miles on a full charge")
class ElectricMotor(Motor):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery = Battery()
4.3 从一个模块中导入多个类
可以根据需要在程序文件中导入任意数量的类。如何以上操作都正确,运行以下代码即可导入类。
from motor import Motor, ElectricMotor, Battery
my_yadi_motor1 = Motor('yadi', 'M8', 2019)
print(my_yadi_motor1.get_descriptive_name())
my_yadi_motor2 = ElectricMotor('yadi', 'M9', 2021)
my_yadi_motor2.battery.describe_battery()
2019 Yadi M8
The Motor has a 90-kwh battery.
4.4 导入整个模块
根据具体需要,可以导入整个模块,再使用句点法访问需要访问的类。
import motor
my_yadi_motor3 = motor.Motor('yadi','S7',2017)
print(my_yadi_motor3.get_descriptive_name())
my_yadi_motor4 = motor.ElectricMotor('yadi','C9',2016)
my_yadi_motor4.battery.describe_battery()
2017 Yadi S7
The Motor has a 90-kwh battery.
4.5导入模块中所有的类
使用 form moudule import * 导入模块中所有的类
不推荐此方式,一是不清楚导入了那些类,二是容易造成名称方面的问题。
4.6在一个模块中导入另一个模块
有时候需要导入的类与其他的类时有关联的,导入不全会引发错误。将以上模块中的battery类存入,battery.py文件中,同时导入两个模块中的两个类。
electirc_motor的一项属性挂接 battery类,因此必须同时导入。
from motor import Motor,ElectricMotor
from battery import Battery
4.7 使用别名
导入类时,也可以为其设置别名
from motor import Motor as Mot
from battery import Battery as Bt
4.8 自定义工作流程
一开始应该让代码结构尽量简单。尽可能在一个文件中完成所有工作,确定一切正常后再将类移动到独立的模块中。