关于“Python”的核心知识点整理大全22-1

简介: 关于“Python”的核心知识点整理大全22

9.4.2 在一个模块中存储多个类

虽然同一个模块中的类之间应存在某种相关性,但可根据需要在一个模块中存储任意数量的 类。类Battery和ElectricCar都可帮助模拟汽车,因此下面将它们都加入模块car.py中: car.py
"""一组用于表示燃油汽车和电动汽车的类"""
class Car():
 --snip--
class Battery():
 """一次模拟电动汽车电瓶的简单尝试"""
 def __init__(self, battery_size=60):
 """初始化电瓶的属性"""
 self.battery_size = battery_size
 def describe_battery(self):
 """打印一条描述电瓶容量的消息"""
 print("This car has a " + str(self.battery_size) + "-kWh battery.")
 def get_range(self):
 """打印一条描述电瓶续航里程的消息"""
 if self.battery_size == 70:
 range = 240
 elif self.battery_size == 85:
 range = 270
 message = "This car can go approximately " + str(range)
 message += " miles on a full charge."
 print(message)
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', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range() 

输出与我们前面看到的相同,但大部分逻辑都隐藏在一个模块中:

2016 Tesla Model S
This car has a 70-kWh battery.
This car can go approximately 240 miles on a full charge. 

9.4.3 从一个模块中导入多个类

可根据需要在程序文件中导入任意数量的类。如果我们要在同一个程序中创建普通汽车和电 动汽车,就需要将Car和ElectricCar类都导入:

my_cars.py

1 from car import Car, ElectricCar
2 my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
3 my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name()) 

在1处从一个模块中导入多个类时,用逗号分隔了各个类。导入必要的类后,就可根据需要 创建每个类的任意数量的实例。

在这个示例中,我们在2处创建了一辆大众甲壳虫普通汽车,并在3处创建了一辆特斯拉 Roadster电动汽车:

2016 Volkswagen Beetle
2016 Tesla Roadster

9.4.4 导入整个模块

你还可以导入整个模块,再使用句点表示法访问需要的类。这种导入方法很简单,代码也易 于阅读。由于创建类实例的代码都包含模块名,因此不会与当前文件使用的任何名称发生冲突。 下面的代码导入整个car模块,并创建一辆普通汽车和一辆电动汽车:

my_cars.py

1 import car
2 my_beetle = car.Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
3 my_tesla = car.ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())
在1处,我们导入了整个car模块。接下来,我们使用语法module_name.class_name访问需要 的类。像前面一样,我们在2处创建了一辆大众甲壳虫汽车,并在3处创建了一辆特斯拉Roadster 汽车。

9.4.5 导入模块中的所有类

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

from module_name import 

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

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

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

有时候,需要将类分散到多个模块中,以免模块太大,或在同一个模块中存储不相关的类。 将类存储在多个模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类。在这种情况 下,可在前一个模块中导入必要的类。 例如,下面将Car类存储在一个模块中,并将ElectricCar和Battery类存储在另一个模块中。 我们将第二个模块命名为electric_car.py(这将覆盖前面创建的文件electric_car.py),并将Battery和ElectricCar类复制到这个模块中:

electric_car.py

"""一组可用于表示电动汽车的类"""
1 from car import Car
class Battery():
 --snip--
class ElectricCar(Car):
 --snip-- 

ElectricCar类需要访问其父类Car,因此在1处,我们直接将Car类导入该模块中。如果我们 忘记了这行代码,Python将在我们试图创建ElectricCar实例时引发错误。我们还需要更新模块 car,使其包含Car类:

car.py
"""一个可用于表示汽车的类"""
class Car():
 --snip-- 

现在可以分别从每个模块中导入类,以根据需要创建任何类型的汽车了:

my_cars.py
1 from car import Car
from electric_car import ElectricCar
my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())

在1处,我们从模块car中导入了Car类,并从模块electric_car中导入ElectricCar类。接下 来,我们创建了一辆普通汽车和一辆电动汽车。这两种汽车都得以正确地创建:

2016 Volkswagen Beetle
2016 Tesla Roadster 

9.4.7 自定义工作流程

正如你看到的,在组织大型项目的代码方面,Python提供了很多选项。熟悉所有这些选项很 重要,这样你才能确定哪种项目组织方式是最佳的,并能理解别人开发的项目。 一开始应让代码结构尽可能简单。先尽可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移到独立的模块中。如果你喜欢模块和文件的交互方式,可在项目开始时就尝 试将类存储到模块中。先找出让你能够编写出可行代码的方式,再尝试让代码更为组织有序。


关于“Python”的核心知识点整理大全22-2 https://developer.aliyun.com/article/1424518

目录
相关文章
|
1月前
|
存储 搜索推荐 数据库
关于“Python”的核心知识点整理大全58
关于“Python”的核心知识点整理大全58
37 2
|
4天前
|
存储 Python 容器
Python新手入门,这些基础知识点你掌握了吗?
【6月更文挑战第12天】Python是新手友好的编程语言,具备解释型、面向对象、动态类型和跨平台特性。基础知识包括:变量(如整数、浮点数、字符串、列表、元组、字典和集合),运算符与控制流(如条件语句和循环),以及函数的定义与调用。要精通Python,还需学习更多如面向对象编程、模块、文件操作等内容。开始你的Python学习之旅吧!
|
10天前
|
数据采集 机器学习/深度学习 数据挖掘
python运用知识点说明
Python涵盖广泛,从基础语法(变量、数据类型、字符串操作)到高级特性(装饰器、迭代器、闭包)。常用库包括NumPy, Pandas(数据处理),Scikit-learn, TensorFlow(机器学习),Django, Flask(Web开发),Scrapy(网络爬虫)。应用于Web开发、数据分析、系统运维、游戏开发和网络爬虫。Python历经1.x、2.x到3.x版本,3.x引入重大更新,强调Unicode和函数打印等,与2.x不兼容。掌握这些能提升开发效率。【6月更文挑战第4天】
27 2
|
26天前
|
Python
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
|
1月前
|
存储 JSON 数据格式
Python知识点——高维数据的格式化
Python知识点——高维数据的格式化
16 0
|
1月前
|
Python
Python知识点——文件和数据格式化
Python知识点——文件和数据格式化
20 0
|
1月前
|
数据可视化 Python
Python模型评估与选择:面试必备知识点
【4月更文挑战第17天】本文深入探讨了Python模型评估与选择在面试中的关键点,包括性能度量、过拟合与欠拟合识别、模型比较与选择、模型融合和偏差-方差权衡。强调了避免混淆评估指标、忽视模型验证和盲目追求高复杂度模型的常见错误,并提供相关代码示例,如交叉验证、网格搜索和超参数调优。通过理解这些概念和技巧,可在面试中展示出色的数据科学能力。
45 12
|
1月前
|
存储 数据可视化 数据挖掘
Python的知识点非常广泛
Python的知识点非常广泛
16 0
|
1月前
|
存储 Java C++
【python基础题】——知识点选择、填空、简答
【python基础题】——知识点选择、填空、简答
82 0
|
1月前
|
Java Shell 索引
[Python]知识点
[Python]知识点
87 0
[Python]知识点