菏泽官方网站,百度联盟怎么看广告赚钱,填写网站信息,小程序制作视频教程随着不断给类添加功能#xff0c;文件可能变得很长#xff0c;即便妥善地使用了继承亦如此。为遵循Python的总体理念#xff0c;应让文件尽可能整洁。 Python在这方面提供了帮助#xff0c;允许将类存储在模块中#xff0c;然后在主程序中导入所需的模块。
导入单个类
下…随着不断给类添加功能文件可能变得很长即便妥善地使用了继承亦如此。为遵循Python的总体理念应让文件尽可能整洁。 Python在这方面提供了帮助允许将类存储在模块中然后在主程序中导入所需的模块。
导入单个类
下面来创建一个只包含Car 类的模块。这让我们面临一个微妙的命名问题目前已经有一个名为car.py的文件但这个模块也应命名为car.py因为它包含表示汽车的代码。 我们将这样解决这个命名问题将Car 类存储在一个名为car.py的模块中该模块将覆盖前面使用的文件car.py。从现在开始使用该模块的程序都必须使用更具体的文件名如my_car.py。 下面是模块car.py其中只包含Car 类的代码
car.py
一个可用于表示汽车的类。
class Car:一次模拟汽车的简单尝试。def __init__(self, make, model, year):初始化描述汽车的属性。self.make makeself.model modelself.year yearself.odometer_reading 0def get_descriptive_name(self):返回整洁的描述性名称。long_name f{self.year} {self.make} {self.model}return long_name.title()def read_odometer(self):打印一条消息指出汽车的里程。print(fThis car has {self.odometer_reading} miles on it.)def update_odometer(self, mileage):将里程表读数设置为指定的值。拒绝将里程表往回调。if mileage self.odometer_reading:self.odometer_reading mileageelse:print(You cant roll back an odometer!)def increment_odometer(self, miles):将里程表读数增加指定的量。self.odometer_reading miles文件包含一个模块级文档字符串对该模块的内容做了简要的描述。你应为自己创建的每个模块编写文档字符串。
下面来创建另一个文件my_car.py在其中导入Car 类并创建其实例 my_car.py
from car import Carmy_new_car Car(audi, a4, 2019)
print(my_new_car.get_descriptive_name())my_new_car.odometer_reading 23
my_new_car.read_odometer()**import 语句让Python打开模块car 并导入其中的Car 类。**这样我们就可以使用Car 类就像它是在这个文件中定义的一样。输出与我们在前面看到的一样
在一个模块中存储多个类
虽然同一个模块中的类之间应存在某种相关性但可根据需要在一个模块中存储任意数量的类。Battery 类和ElectricCar 类都可帮助模拟汽车下面将它们都加入模块car.py中
car.py
一组用于表示燃油汽车和电动汽车的类。
class Car:--snip--
class Battery:一次模拟电动汽车电瓶的简单尝试。def __init__(self, battery_size75):初始化电瓶的属性。self.battery_size battery_sizedef describe_battery(self):打印一条描述电瓶容量的消息。print(fThis car has a {self.battery_size}-kWh battery.)def get_range(self):打印一条描述电瓶续航里程的消息。if self.battery_size 75:range 260elif self.battery_size 100:range 315print(fThis car can go about {range} miles on a full charge.)
class ElectricCar(Car):模拟电动汽车的独特之处。def __init__(self, make, model, year):初始化父类的属性。再初始化电动汽车特有的属性。super().__init__(make, model, year)self.battery Battery()现在可以新建一个名为my_electric_car.py的文件导入ElectricCar 类并创建一辆电动汽车了
my_electric_car.py
from car import ElectricCar
my_tesla ElectricCar(tesla, model s, 2019)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()输出与我们在前面看到的相同但大部分逻辑隐藏在一个模块中
从一个模块中导入多个类
可根据需要在程序文件中导入任意数量的类。如果要在同一个程序中创建普通汽车和电动汽车就需要将Car 类和ElectricCar 类都导入
my_cars.py 从一个模块中导入多个类时用逗号分隔了各个类。导入必要的类后就可根据需要创建每个类的任意数量实例。
from car import Car, ElectricCarmy_beetle Car(volkswagen, beetle, 2019)
print(my_beetle.get_descriptive_name())my_tesla ElectricCar(tesla, roadster, 2019)
print(my_tesla.get_descriptive_name())导入整个模块
还可以导入整个模块再使用句点表示法访问需要的类。这种导入方式很简单代码也易于阅读。因为创建类实例的代码都包含模块名所以不会与当前文件使用的任何名称发生冲突。
import car #导入了整个car 模块my_beetle car.Car(volkswagen, beetle, 2019)
print(my_beetle.get_descriptive_name())my_tesla car.ElectricCar(tesla, roadster, 2019)
print(my_tesla.get_descriptive_name())导入模块中的所有类
要导入模块中的每个类可使用下面的语法
from module_name import *不推荐使用这种导入方式原因有二。 第一如果只看文件开头的import 语句就能清楚地知道程序使用了哪些类将大有裨益。然而这种导入方式没有明确地指出使用了模块中的哪些类。 第二这种方式还可能引发名称方面的迷惑。如果不小心导入了一个与程序文件中其他东西同名的类将引发难以诊断的错误。
在一个模块中导入另一个模块
有时候需要将类分散到多个模块中以免模块太大或在同一个模块中存储不相关的类。将类存储在多个模块中时你可能会发现一个模块中的类依赖于另一个模块中的类。在这种情况下可在前一个模块中导入必要的类。 下面将Car 类存储在一个模块中并将ElectricCar 类和Battery类存储在另一个模块中。 将第二个模块命名为electric_car.py这将覆盖前面创建的文件electric_car.py并将Battery 类和ElectricCar 类复制到这个模块中
electric_car.py
一组可用于表示电动汽车的类。
from car import Carclass Battery:
--snip--class ElectricCar(Car):
--snip--ElectricCar 类需要访问其父类Car 因此在开头处直接将Car 类导入该模块中。
car.py
一个可用于表示汽车的类。
class Car:--snip--现在可以分别从每个模块中导入类以根据需要创建任何类型的汽车了
my_cars.py
from car import Car
from electric_car import ElectricCar
my_beetle Car(volkswagen, beetle, 2019)
print(my_beetle.get_descriptive_name())
my_tesla ElectricCar(tesla, roadster, 2019)
print(my_tesla.get_descriptive_name())使用别名
要在程序中创建大量电动汽车实例需要反复输 入ElectricCar 非常烦琐。为避免这种烦恼可在import 语句中给ElectricCar 指定一个别名
from electric_car import ElectricCar as EC现在每当需要创建电动汽车实例时都可使用这个别名
my_tesla EC(tesla, roadster, 2019)