1. 模块(module)
对于大型项目,需要组织类之间的结构。
什么是模块?
简单来说,模块就是一个Python文件,仅此而已。
模块名全部采用小写,用下划线分割。
(eg: game_main, game_register)
举例说明:
假设我们有一个database.py模块,其中包含一个Database类。另外我们有一个product.py模块。product.py模块需要依赖Database类。
我们可以有几种写法。
写法1(模糊导入):
import database
db = database.Database()
写法2(精确导入类):
from database import Database
db = Database()
写法3(精确导入+别名):
from database import Database as DB
db = DB()
一次导入多个类
from database import Database, Query
导入模块中所有类和函数
from database import *
2. 包(package)
包就是目录。
但是它和目录的区别是:
- 包是一个目录下模块的集合
- 包目录下必须存在一个空的文件init.py(没有这个文件我们无法从目录导入模块)
包名全部采用小写,不用下划线,层级包名用.号分割。
(eg: com.genesis, com.genesis.infra)
一个例子:
代码目录层级
door_dir/
main.py
ecommerce/
__init__.py
database.py
products.py
payments/
__init__.py
alipay.py
几种导入方式
绝对导入:
import ecommerce.products
product = ecommerce.products.Product()
或者
# 推荐
from ecommerce.products import Product
product = Product()
或者
from ecommerce import products
product = products.Product()
相对导入(推荐):
我们想在products模块中导入database相关类,由于它们是同级目录,可以这样:
from .database import Database
db = Database()
如果我们的位置是在alipay.py中,由于database.py是它的上级目录中的文件,需要这样:
from ..database import Database
注意: 我们可以用更多的点号来访问更上层的模块,例如三个点代表上上级目录。
网友评论