九、类5(2022-04-21)

#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 自定义工作流程

一开始应该让代码结构尽量简单。尽可能在一个文件中完成所有工作,确定一切正常后再将类移动到独立的模块中。

你可能感兴趣的:(九、类5(2022-04-21))