《Python编程从入门到实践》——学习python的第十六天

Python学习的第十六天

  • 前言

前言

今天是学习Python的学习的第十六天。上一次的两个代码不晓得大家弄明白了没有,后面会越来越难的,所以大家尽量弄明白一点吧。一定要仔细看注释、注释

导入类

随着不断给类添加功能,文件可能会变得越来越长,Python允许将类存储在模块中,然后再主程序中导入模块

导入单个模块

这里的Car类模板是上一天的那个类的板块

class Car:
---snip---
#创建子类时,父类文件必须包含在该文件中,且圆括号内必须包含父类的名称
#---snip--- 表示上一个代码中父类的基本属性

class Battery:#先是定义了一个新类——Battery,他没有继承任何类。
    """一次模拟电动汽车电瓶的简单尝试。"""


    def __init__(self,battery_size = 75):#其中有一个形参battery_size,这个形参是可选的,被默认为75.但不是默认值,仍然可以进行改变的
        """初始化电瓶的属性"""
        self.battery_size = battery_size


    def describe_battery_size(self):
        """打印一条描述电瓶容量的消息"""
        print(f"This car has a {self.battery_size}-kwh battery")




    def get_range(self):
        """打印一条消息,指出电瓶的续航里程"""
        if self.battery_size == 75:
            range = 260


        elif self.battery_size == 100:
            range = 315


        print(f"This car can go about {range} miles on a full charge")


#虽然将原来的实例电池作为属性,有点繁杂,但是整个之后可以方便我们对电池进行更详细的描述,不至于在子类中显得太繁杂


class Electric_Car(Car):
    """描述电动汽车类"""


    def __init__(self,make,model,year):
        """
        初始化父亲的属性
        再初始化电动汽车特有的属性
        """
        super().__init__(make,model,year)#super()能够让我们调用父类的方法
        self.battery_size = Battery()#直接在子类的基本属性中添加基本属性了




    def describe_battery(self):#添加新的方法
        """打印一条描述电瓶容量的消息"""
        print(f"This car has a {self.battery_size.battery_size}-kwh battery.")#当battery没有变成类的时候,battery相当于一个一个简单
#的属性并且已经是个默认值了。但是将battery变成类时,battery_size = Battery 然后需要去该类中寻找描述电池的方法,所以格式为,实例名.属性.类方法




    def fill_gas_tank(self):
        """电瓶车没有汽油"""
        print(f"This car doesn't need a gas tank")



上面是文件源码

from Car类模板 import Car


my_new_car = Car('audi','a4','2019')
print(my_new_car.get_descriptive_name())


my_new_car.odometer_reading = 23#直接访问Car类的属性并进行修改
my_new_car.show_odometer()

结果:
2019 Audi A4
This car has 23 miles on it

使用导入后文件明显变的简洁

在一个模块中存储多个类
如果几个类相关联,则可以存储在同一个模块,也可以没关联,反正一个,模块中可以存储多个类

from print_founction import Electric_Car#print_founction 中含有多个类,这里调用了Electri_Car,通过该类成功的调用了类 Battery


my_new_car = Electric_Car('audi','a4',2019)
print(my_new_car.get_descriptive_name())


my_new_car.battery_size.describe_battery_size()


my_new_car.battery_size.get_range()

结果:
2019 Audi A4
This car has a 75-kwh battery
This car can go about 260 miles on a full charge
2009 Tesla Suv

从一个模块中导入多个类
关键语句:from 模块名 import 类、类

from print_founction import Electric_Car


my_new_car = Electric_Car('audi','a4',2019)
print(my_new_car.get_descriptive_name())


my_new_car.battery_size.describe_battery_size()


my_new_car.battery_size.get_range()


my_old_car = Car('tesla','Suv',2009)


print(my_old_car.get_descriptive_name())

结果:
2019 Audi A4
This car has a 75-kwh battery
This car can go about 260 miles on a full charge
2009 Tesla Suv
总结:这里用来两个实例分别对应Car和Electric_Car调用了两个类

导入整个板块
关键语句:import 模块名。但是后面调用类时,得让其检索到类时来自那个模块的所以调用时 实例名 = 模块名.类(基本属性)

import print_founction
my_new_car = print_founction.Electric_Car('audi','a4',2019)
print(my_new_car.get_descriptive_name())


my_new_car.battery_size.describe_battery_size()


my_new_car.battery_size.get_range()


my_old_car = print_founction.Car('tesla','Suv',2009)


print(my_old_car.get_descriptive_name())

结果同上

导入模块中所有类
关键语句:from 模块 import*

from print_founction import*my_new_car = Electric_Car('audi','a4',2019)print(my_new_car.get_descriptive_name())my_new_car.battery_size.describe_battery_size()my_new_car.battery_size.get_range()my_old_car = Car('tesla','Suv',2009)print(my_old_car.get_descriptive_name())
结果同上,这里时导入所有类,所以不需要索引类的位置,格式与导入整个板块不同

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

有时候,需要将多个类分散到多个模块中,以免模块太大,或者在同一个模块中有不相关联的类。
前提:我将Car类与Electric_Car分离,将Car类模块的导入Electric_Car模块中

from Car类模板 import  Car
from Car类模板 import Electric_Car
#使用from import分别调用类

my_old_car = Car('adiu','Suv',2019)
my_old_car.get_descriptive_name()


my_new_car = Electric_Car('baoma','yueyedi',2013)
my_new_car.get_descriptive_name()


print(my_old_car.get_descriptive_name())
print(my_new_car.get_descriptive_name())

结果:

2019 Adiu Suv
2013 Baoma Yueyedi

今天的内容也不是很多,希望大家能够好好消化,加油。

你可能感兴趣的:(新手,python学习)