为了使文件尽可能的简洁,因此将类存储在模块中,在主程序中导入所需模块。
方法:from 文件名 import 类(文件名为要导入的类所存在的文件名) 在包含主程序的文件中运用from语句导入我们想要调用的类
from text import Car
my_new_car=Car("tisila","ab",2019)#对导入的类直接进行实例传递
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading=23
my_new_car.read_odometer()
输出结果:
2019 Tisila Ab
this car has 23 miles on it
导入类是一种有效的编程方式,如果这个程序包含整个类,那就会显得特别的繁多,通过将这个类移到一个模块中,并导入该模块,依然可以实现所有的功能,但主程序文件变得非常简洁易读。
虽然同一个模块中的类具有相关性,但你可根据自己的需求在一个模块中存储多个类。
例如,现在的text文件中,我们存放了两个类:
但主函数中我们又不想调用两个类,依然可以通过from语句实现存有多个类的文件中,某一个类的调用。
例如,我们现在导入ElectricCar类:
from text import ELectricCar
my_new_car=ELectricCar("tisila","ab",2019)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading=23
my_new_car.read_odometer()
输出结果:
__init__()方法被调用
2019 Tisila Ab
this car has 23 miles on it
可根据自己的需求在程序文件中导入任意数量的类,方法:from 文件名 import 类1,类2,,,,
举例:
from text import ELectricCar,Car#导入ElectricCar类和Car类,不同类之间用逗号隔开
my_new_car=ELectricCar("tisila","ab",2019)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading=23
my_new_car.read_odometer()
还可以导入整个模块,再使用句点表示法访问需要的类,这种导入方式很简单,代码也易于阅读,因为创建的实例的代码都包含模块名,所以不会与当前文件使用的任何名称发生冲突。
方法:import 文件名
举例:
import text#导入文件text里面的所有类
#调用ElectricCar类
my_new_car=text.ELectricCar("tisila","ab",2019)#注意调用方式是:文件名.类名
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading=23
my_new_car.read_odometer()
#调用People类
my_person=text.People("lisa",10000)
print(my_person.name)
print(my_person.money)
输出结果如下所示:
__init__()方法被调用
电瓶车的特点为:
None
this car has 23 miles on it
lisa
10000
该文件中包含的所有类都会被导入
要导入模块中的每个类,可使用如下方法:
from module_name(模块名) import*
举例:
from text import*
my_new_car=ELectricCar("tisila","ab",2019)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading=23
my_new_car.read_odometer()
my_person=People("lisa",10000)
print(my_person.name)
print(my_person.money)
输出结果如下所示:
__init__()方法被调用
电瓶车的特点为:
None
this car has 23 miles on it
lisa
10000
但我们并不推荐这种导入方式,有以下两个原因:
原因1:如果只看文件开头的Import语句,就能清楚地知道程序中使用了那些类,将可大大提高效率,然而这种导入方式没有明确的指出使用了模块中的那些类。
原因2:这种方式还有可能引发名称方面的迷惑,如果不小心导入了一个和程序文件中其他东西同名的类,将引发难以诊断的错误。
需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name(模块名).Class_name(类名)语法来访问类,这样做,虽然文件开头没有列出用到的所有类,但你能清楚的知道在程序的那些地方使用了导入的模块,这样也避免了导入模块中,每个类可能引发的名称冲突。
有时候需要将类分散到多个模块,以免模块太大或者在同一个模块中存储不相关的类,将类存储在多个模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类,在这种情况下,可在前一个模块中导入必要的类。
举例:
#分别从每个模块导入类
#ELectricCar作为Car的子类,在存储ELectricCar的模块中需要将父类导入
from electriccars import ELectricCar,Battery#ELectricCar,Battery存储在一个模块中
from text import Car
my_new_cars=Car("tisila","ab",2019)
print(my_new_cars.get_descriptive_name())
my_electricCars=ELectricCar("小新","abc",2020)
my_electricCars.get_descriptive_name("小新")
my_electricCars=Battery()
my_electricCars.electric_battery()
汽车的特点为:
2019 Tisila Ab
__init__()方法被调用
小新是电瓶车
电池的容量为75
导入类时,也可指定别名。
例如,要在程序中创建大量的电动车实例,需要反复输入ElectricCars,非常麻烦,为避免这种烦恼,可在import语句中给ElectricCars指定一个别名:
from 模块名 import 类名 as 别名
举例:
from electriccars import ELectricCar as EC
my_electricCars=EC("小新","abc",2020)#在此后的调用中,直接使用别名
my_electricCars.get_descriptive_name("小新")
__init__()方法被调用
小新是电瓶车
一开始应让代码结构尽可能简单,先尽可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类转移到单独的模块中,如果你喜欢和文件的交互方式,可在项目开始时就尝试将类存储在模块中,先找出让你能够编写出可行代码的方式,在尝试改进代码。
python标准库是一组模块,我们安装的python都包含它,也就是说我们可以使用其他程序员编写好的模块了,可以使用标准库中的任何函数和类,只需在程序开头包含一条简单的import语句即可。
举例:
#randint函数将两个整数作为参数
#并随机返回一个位于这两个整数之间(包含这两个整数)的整数
from random import randint#random随机模块
print(randint(1,9))
7
在random模块中,另一个有用的函数是choice(),它将一个列表或者元组作为参数,并随机返回其中的一个元素。
举例:
from random import choice
players=["charles",'martina',"florence",'eli']
first_up=choice(players)
print(first_up)
florence
创建与安全相关的应用程序时,请不要使用模块random,但该模块可以很好地用于创建众多有趣的项目。
类名应使用驼峰命名法,即将类名中的每个单词地首字母都要大写,而不使用下划线,实例名和模块名都使用小写格式,并在单词之间加上下划线。
对于每个类,都应紧跟在类定义后面包含一个文档字符串,这种文档字符串简要的描述类地功能,并遵循编写函数地文档字符串时采用的格式约定,每个模块也都应该包含一个文档字符串,对其中的类可用于进行什么描述。
可使用空格来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法,而在模块中,可使用两个空行来分隔类。
需要同时导入标准库中的模块和自己编写的模块,先编写导入标准库模块中的import语句,在添加一个空行,然后编写导入自己编的模块的import语句,在包含多条import语句的程序中,这种做法更容易明白程序使用的各个模块来自何处