10.4 将模块分割成多个文件

上传人:野鹰 文档编号:1352783 上传时间:2017-06-08 格式:PDF 页数:3 大小:101.73KB
返回 下载 相关 举报
10.4 将模块分割成多个文件_第1页
第1页 / 共3页
10.4 将模块分割成多个文件_第2页
第2页 / 共3页
10.4 将模块分割成多个文件_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《10.4 将模块分割成多个文件》由会员分享,可在线阅读,更多相关《10.4 将模块分割成多个文件(3页珍藏版)》请在金锄头文库上搜索。

1、10.4 将模块分割成多个件问题你想将个模块分割成多个件。但是你不想将分离的件统成个逻辑模块时使已有的代码遭到破坏。解决案程序模块可以通过变成包来分割成多个独的件。考虑下下简单的模块:# mymodule.pyclass A:def spam(self):print(A.spam)class B(A):def bar(self):print(B.bar)假设你想mymodule.py分为两个件,每个定义的个类。要做到这点,先mymodule录来替换件mymodule.py。 这这个录下,创建以下件:mymodule/_init_.pya.pyb.py在a.py件中插以下代码:# a.pycla

2、ss A:def spam(self):print(A.spam)在b.py件中插以下代码:# b.pyfrom .a import Aclass B(A):def bar(self):print(B.bar)最后,在 init.py 中,将2个件粘合在起:# _init_.pyfrom .a import Afrom .b import B如果按照这些步骤,所产的包MyModule将作为个单的逻辑模块: import mymodule a = mymodule.A() a.spam()A.spam b = mymodule.B() b.bar()B.bar讨论在这个章节中的主要问题是个设计问

3、题,不管你是否希望户使很多模块或只是个模块。举个例,在个型的代码库中,你可以将这切都分割成独的件,让户使量的import语句,就像这样:from mymodule.a import Afrom mymodule.b import B.这样能作,但这让户承受更多的负担,户要知道不同的部分位于何处。通常情况下,将这些统起来,使条import将更加容易,就像这样:from mymodule import A, B对后者,让mymodule成为个的源件是最常见的。但是,这章节展了如何合并多个件合并成个单的逻辑命名空间。 这样做的关键是创建个包录,使 init.py 件来将每部分粘合在起。当个模块被分割

4、,你需要特别注意交叉引的件名。举个例,在这章节中,B类需要访问A类作为基类。包的相对导 from .a import A 来获取。整个章节都使包的相对导来避免将顶层模块名硬编码到源代码中。这使得重命名模块或者将它移动到别的位置更容易。(见10.3节)作为这章节的延伸,将介绍延迟导。如图所,init.py件次导所有必需的组件的。但是对于个很的模块,可能你只想组件在需要时被加载。 要做到这点,init.py有细微的变化:# _init_.pydef A():from .a import Areturn A()def B():from .b import Breturn B()在这个版本中,类A和类B被替换为在第次访问时加载所需的类的函数。对于户,这看起来不会有太的不同。 例如: import mymodule a = mymodule.A() a.spam()A.spam延迟加载的主要缺点是继承和类型检查可能会中断。你可能会稍微改变你的代码,例如:if isinstance(x, mymodule.A): # Error.if isinstance(x, mymodule.a.A): # Ok.延迟加载的真实例, 见标准库 multiprocessing/init.py 的源码.W3Cschool()最的技术知识分享与学习平台此篇内容来于站户上传并发布。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号