(标答出处: 鱼C论坛)
《零基础入门学习Python》
本节知识点:
一、
容器 -> 数据的封装
函数 -> 语句的封装
类 -> 方法和属性的封装
模块 -> 模块就是程序
二、
在使用模块中的方法时,要加上命名空间:
例如,import os 则要写 os.方法名()
三、导入模块的方法:
(1)import 模块名
(2)from 模块名 import 函数名 (不推荐)
(3)import 模块名 as 新名字
测试题:
答:python 的模块其实就是程序。
答:
import hello
hello.hi()
答:三种
import 模块名
form 模块名 import 方法名
import 模块名 as 新模块名
答:给不想导入的“隐私”属性名称前面加上“_”。但是要注意的是,如果用import … 导入整个模块,或者显式的用import xx_oo导入某个属性那么,这个隐藏方法就不起作用了。
答:会打印 “嗨,我是 B 模块~”,因为在第二次导入模块的时候,表b的sayHi把第一次导入的A中的模块覆盖了,这就是命名空间的冲突,所以要避免使用form…import… ,除非非常明确不会造成冲突。
答:这个是循环嵌套导入的问题,无论运行a.py或b.py哪一个文件都会抛出ImportError异常。这是因为在执行其中某一个文件(a.py) 的加载过程中,会创建模块对象并执行对应的字节码。但当执行第一个语句的时候需要导入另一个文件(from b import y),因此CPU会转而去加载另一个文件(b.py)。此时,之前的文件处于仅导入第一条语句的阶段,因此其对应的字典中并不存在x,故抛出“ImportError:cannot import name ‘x‘ ”异常。
解决方法是直接用import 导入模块。
动动手:
#用于让python支持常量操作
class Const :
def __setattr__ (self,name,value) :
if name in self.__dict__ :
raise TypeError('常量无法改变')
if not name.isupper() :
raise TypeError ('常量名必须由大写字幕组成!')
self.__dict__[name] = value
import sys
sys.modules[__name__] = Const()