一、pyhton项目组织架构—包和模块和类
python组织架构:包–>模块–>类。而类中有函数和变量。一个包可以包含很多模块,一个模块可以包括很多类。和java、c++不同,python中一个文件经常有多个类。java和c++中一般一个文件只有一个类,包可以理解就是一个文件夹(java中是jar包的概念)。
1,包和模块的命名
表面上看,包的名字就是文件夹的名字,模块的名字就是文件的名字,如果想让一个普通文件夹成为一个包,就在文件夹中加入init.py文件,当然我们也可以在这个文件中写代码。不过它比较特殊,init.py这个模块的名字就是包名,比如如下包中init.py模块的名字就是python:
1.1,模块的导入
在一个模块中导入另一个模块,用 import module_name来导入,使用的时候通过 模块名.变量名来使用,否则会找不到这个变量。如下图所示,我们虽然导入了test6这个模块,但是使用test6模块的变量c在输出语句还是报错了,我们改为test6.c则可以,这就说明要通过模块名.变量名来使用其他模块的变量。并输出c的值为3,我们在test6模块中定义了变量c,它的值为3。我们也可以引入模块中的函数。
注意:python是解释型语言,引入模块的时候import语句应该在第一行,如果我们把import语句放在需要调用被引入模块的变量或函数时,python解释器会报错,,如下图所示:
如果是子包就需要加上命名空间。import只能导入模块,不能用模块.变量名来导入变量。不过可以import test6 as m(这就是把命名空间简化成一个字符),引用变量的时候就可以这样:
1 | import test6 as f |
可以看到编译器没有报错,而且同样可以运行成功。
1.1.2 模块(module)另一种导入方式
语法:
1 | from py.test import c |
我们是直接导入了test6的变量c,所以可以直接使用变量c。
同样,我们也可以用这种方式导入模块,如下:
1 | from py import test |
其中py
是python包下的子包,它和模块test7.py是属于同一级。如果一个模块有很多变量需要被其他的模块使用那应该怎么导入呢?
1 | from py.test import * |
可以看到,我们可以用 ‘*’来导入py.test中所有的变量和函数。不过会提示语法错误,但是可以执行。实际开发中并不是所有的变量和函数我们都需要,所以我们还可以控制 * 的导入行为,导入什么不导入什么,在需要被导入的模块中添加如下代码,就说明只导入变量a和b:
1 | __all__ = ['a','b'] |
python建议一般一行不要超过80个字符。
1 | from test5 import a,b,\ |
init.py是什么?有什么作用?
init.py可以帮我们做初始化,我们可以把需要导入的库在这里导入,然后在其他的模块中导入包(要确定该包中有init.py这个文件)。
2,包的导入知识点
1,包的导入不会重复
2,注意循环导入
1 | #test7.py |
这就是循环导入,代码会出问题。