8.0、Python基础---类(浅读)(下)

目录

8.5、导入类

8.5.1、导入单个类

8.5.2、在一个模块中存储多个类

8.5.3、导入模块中的所有类

8.5.4、在一个模块中导入另一个模块


8.5、导入类

随着你不断地给类添加功能,文件可能变得很长,即便你妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。为在这方面提供帮助,Python允许你将类存储在模块中,然后在主程序中导入所需的模块。

8.5.1、导入单个类

例如前面汽车的案例,首先创建一个car.py文件,里面只包含Car类的代码。

"""
    一个用于表示汽车的类
"""
class Car():
    """模拟汽车 -> make :制作 ;model:模型;year:年份"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make  # 制作
        self.model = model # 模型
        self.year = year # 年份
        self.odometer = 0

    def get_read_odometer(self):
        """获取汽车的里程信息"""
        print("此款"+self.make+self.model+
              '型车已行驶'+str(self.odometer) + '公里')

    def update_orometer(self,mileage):
        """
        将里程表读数设置为指定的值
        禁止将里程表数让回调
        """
        if mileage >= self.odometer:
            self.odometer = mileage
        else:
            print("您的操作无效")

    def increment_odometer(self,miles):
        """将里程表读数增加指定的量"""
        self.odometer += miles

    def get_car_information(self):
        """返回一些描述汽车的信息"""
        mesg_name = '生产于:'+str(self.year)+'年 --> 类型:'+self.make+' --> 型号:'+self.model
        return mesg_name
    def fill_gas_tank(self):
        """模拟父类中fill_gas_tank()方法"""
        print("父类--->这个汽车没有油箱!")

    def print_info(self):
        """打印汽车信息方法"""
        return print(self.get_car_information())

下面来创建另一个文件----->my_car.py,其中导入Car类并创建实例。

from car import Car
my_new_car = Car('奔驰','G500',2020)
print(my_new_car.get_car_information())
my_new_car.odometer = 34
my_new_car.get_read_odometer()

import语句让Python打开模块car,并导入其中的Car类。这样我们就可以使用Car类了。

运行结果:

生产于:2020年 --> 类型:奔驰 --> 型号:G500
此款奔驰G500型车已行驶34公里

8.5.2、在一个模块中存储多个类

虽然同一个模块中的类之间应存在某个相关性,但可根据需要在一个模块中存储任意数量的类。

下面将类Battery和ElectricCar都可帮助模拟汽车,因此下面将它们都加入模块car.py中:

from car import ElectricCar
my_moto = ElectricCar('小刀','A6',2019)
print(my_moto.get_car_information())
my_moto.battery.battery_value = 85
my_moto.battery.describe_battery()
my_moto.battery.get_range()

运行结果:

生产于:2019年 --> 类型:小刀 --> 型号:A6
这个电瓶电量:85-kWh
此电瓶续航 360 -公里

8.5.3、导入模块中的所有类

要导入模块中的每个类,可食用下面的语法:

from module_name import *

不推荐使用这种导入方式,其原因有二。首先,如果只要看一下文件开头的import语句,就能清楚地知道程序使用了哪些类,将大有裨益;但这种导入方式没有明确地指出你使用了模块中的哪些类。这种导入方式还可能引发名称方面的困惑。如果你不小心导入了一个与程序文件中其他东西同名的类,将引发难以诊断的错误。这里之所以介绍这种导入方式,是因为虽然不推荐使用这种方式,但你可能会在别人编写的代码中见到它。

需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name.class_name语法来访问类。这样做时,虽然文件开头并没有列出用到的所有类,但你清楚地知道在程序的哪些地方使用了导入的模块;你还避免了导入模块中的每个类可能引发的名称冲突。

8.5.4、在一个模块中导入另一个模块

有时候,需要将类分散到多个模块中,以免模块太大,或在同一个模块中存储不相关的类。将类存储在多个模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类。


from car import Car
class Battery():
    --略--
class ElectricCar(Car):
    --略--

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值