当我们项目越来越复杂,将所有功能写进一个脚本显然不是一个最优的方法,分门别类将不同的功能的语句、函数、对象封装在不同的模块里。什么是一个模块?模块非常简单就是一个python脚本,在一个项目中我们或许会用到许多模块。而包相当于一个文件夹,里面存放着很多的脚本文件,即模块。
1.模块的使用
定义:实质上就是一个python脚本文件
使用原因:
1.实现代码重用
2.命名空间
3. 实现数据或服务的共享
导入模块的内部步骤
1.找到模块文件
2. 编译为字节码
3. 运行模块文件
模块的搜索范围
1.项目主程序
2.环境变量
3.标准库 (如:math)
4.扩展库
import 导入模块
import math # 导入python自带的模块math
def hello():
print(math.pi) # 调用math模块pi变量
if __name__ == "__main__":
hello()
导入自定义模块,假如我们有一个main.py文件、view.py文件、model.py文件存放在一个路径下
models.py
page = 5
def test():
print('models.test()')
views.py
X = 99
def test():
print('view.test()')
main.py
import models # 导入相同目录下自定义的models.py
import views # 导入相同目录下自定义的views.py
def hello():
print(models.page) # 调用models模块page变量
if __name__ == "__main__":
views.test() # 调用views模块test()函数
hello()
# 打印结果
# views.test()
# 5
from … import … 导入模块中的函数、变量
from models import page # 导入models模块中的page变量
from views import * # 导入views模块中的全部对象
def hello():
print(page) # 调用models模块下的page变量,不需要在使用模块名
if __name__ == "__main__":
hello()
重名:导入的两个模块具有名称相同的两个函数,如上面的views.py和models.py都有test()函数
from models import test as mtest
from views import test as vtest
reload 重新导入模块
当我们对以前导入模块进行修改后,执行模块中内容发现并没有改变,这是因为模块在导入时被编译为字节码,虽然对模块进行了修改但没有重新编译。如果想使用修改后模块的内容,则需要使用importlib包中的reload函数。
格式:importlib.reload(模块名)
import importlib # 导入importlib模块
import views
importlib.reload(views) # reload重新加载模块
当导入时没有采取import 模块名,而是使用from 模块 import 成员。导入时不适用
from views import test
import importlib
importlib.reload(views) # 报错
importlib.reload(test) # 报错
importlib.reload(views.test) # 报错
2.包的使用
作用:增加区分代码的层级(类似一个文件夹)
假如有main.py文件,与它同级有一个名叫a的包,里面有product.py和__init__.py文件。
product.py文件
X = 100
def get_product_list():
print('产品列表')
main.py文件
import a.product # 导入包中模块
包中的__init__.py文件作用
初始化一些信息:初始化数据库连接,初始包上下文信息。
init.py
print('a包已被调用')
只有包第一次导入时被编译。python3.3以下不可以删除,python3.3以上若没有初始化东西可以删除。
3面对对象编程
3.1.面向对象编程步骤
OOA面向对象分析
分析对象的特征
分析对象与对象之间的关系:
聚合(如图书上需要有作者,编号等)、复合(如衣服上要有衣领,复合比聚合联系更紧密,聚合可有可没有)、依赖(如开车这个动作需要有车)
分析对象间的继承关系
OOD面向对象设计
写类描述对象的模板,蓝图
OOP面向对象编程
实例化对象的过程
3.2.init()初始化函数
import datetime
class Book:
def __init__(self, title, price, author, publisher, pubdate):
self.title = title
self.price = price
self.author = author
self.publisher =</