《Python 3 面向对象编程》学习笔记(三)-包与模块

Python的包与模块

包(package)

一个包(package)是一个目录下模块的集合。包的名字就是目录的名字。
只需要在目录下添加一个名为__init__.py 的文件(通常是空文件)就可以告诉Python 这个目录是一个包。
如果忘记添加__init__.py文件,就没办法从目录导入模块了。

包的特殊模块:init.py

理解:将目录定义为包的__init__.py 文件

模块(module)

(1)Python模块对应于一个py磁盘文件
(2)Python语言允许同一目录下的两个模块中的类可以相互导入使用,即:import【能不能不同目录下的模块也可以通过绝对路径,导入类使用
(3)import 语句用于从模块中导入模块或特定的类、函数
示例:
设有文件名:database.py
其中有个类:Database
import语句语法存在以下几种变式:
(1)

import database      #模块名,也就是对应py的文件名
db=database.Database()

(2)

from database import Database     #Database是类名(采用驼峰命名法),这里不需要括号
db=Database()

(3)如果因为某些原因,products 已经有一个名为Database 的类,而我们不想将这两个类名搞混,可以将导入的类名重命名之后用于products 模块

from database import Database as DB
db = DB()

(4)也可以从一个模块中同时导入多个类

from database import Database, Query

(5)或者导入模块的全部类【但这种方法有损效率,也会让代码晦涩难懂】

from database import *

组织模块

假设:模块(py文件)放入工作目录【包】(parent_directory)下的子目录【包】ecommerce中

parent_directory/
	main.py
	ecommerce/
		__init__.py
		databases.py
		products.py
		payments/
			__init__.py
			square.py
			stripe.py

注意:子目录ecommerce, 孙目录payments下存在__init__.py
在包(目录)之间导入模块或类的时候要注意语法:
(1)绝对导入
绝对导入是指定我们想要导入的模块、函数或路径的完整路径.
三种等效示例

import ecommerce.products
product = ecommerce.products.Product()  #比较费解难记,点号操作符(period operator)不能让人一眼就区分包或模块
#或者
from ecommerce.products import Product  #自明性好
product = Product()
#或者
from ecommerce import products          #费解难记
product = products.Product()

绝对导入的好处是不需要在导入时记住包之间的目录层次关系,相对导入是需要的
(2)相对导入
相对导入基本上是一种寻找与当前模块在位置上有相对关系的类、函数或模块的方式.

from .databases import Database #导入当前包内的模块database中的类Database
from ..databases import Database #导入父包中的模块database中的类Database

模块的特殊变量:main

每个模块都有一个特殊变量__name__存储模块被导入时的名字。
如果:

if __name__ == "__main__":

一直返回“True”说明该模块未被导入,所以常可以用作把某个模块的类的函数作为唯一入口:也就是说该模块没被“导入过”,而是直接“执行”了就会判断该语句。
从另一个侧面说明:py文件的,不在类中或者对象、函数中的语句也是可以运行的,可能有点费解:是因为本人一直熟悉C++ 的类,对象,函数(方法)的关系,大部分语句都是写在具体的类中的函数内的,虽然C++ 有全局、静态变量。对于PYTHON变量、函数或对象、类的访问和作用范围也是需要好好理解的。
一般来说,任何Python 语句都可以在任何时间执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值