电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Python如何將將模塊分割成多個文件

瀏覽:87日期:2022-07-15 09:33:49

問題

你想將一個模塊分割成多個文件。但是你不想將分離的文件統(tǒng)一成一個邏輯模塊時使已有的代碼遭到破壞。

解決方案

程序模塊可以通過變成包來分割成多個獨(dú)立的文件??紤]下下面簡單的模塊:

# mymodule.pyclass A: def spam(self): print(’A.spam’)class B(A): def bar(self): print(’B.bar’)

假設(shè)你想mymodule.py分為兩個文件,每個定義的一個類。要做到這一點(diǎn),首先用mymodule目錄來替換文件mymodule.py。 這這個目錄下,創(chuàng)建以下文件:

mymodule/ __init__.py a.py b.py

在a.py文件中插入以下代碼:

# a.pyclass 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

如果按照這些步驟,所產(chǎn)生的包MyModule將作為一個單一的邏輯模塊:

>>> import mymodule>>> a = mymodule.A()>>> a.spam()A.spam>>> b = mymodule.B()>>> b.bar()B.bar>>>

討論

在這個章節(jié)中的主要問題是一個設(shè)計問題,不管你是否希望用戶使用很多小模塊或只是一個模塊。舉個例子,在一個大型的代碼庫中,你可以將這一切都分割成獨(dú)立的文件,讓用戶使用大量的import語句,就像這樣:

from mymodule.a import Afrom mymodule.b import B...

這樣能工作,但這讓用戶承受更多的負(fù)擔(dān),用戶要知道不同的部分位于何處。通常情況下,將這些統(tǒng)一起來,使用一條import將更加容易,就像這樣:

from mymodule import A, B

對后者而言,讓mymodule成為一個大的源文件是最常見的。但是,這一章節(jié)展示了如何合并多個文件合并成一個單一的邏輯命名空間。 這樣做的關(guān)鍵是創(chuàng)建一個包目錄,使用 __init__.py 文件來將每部分粘合在一起。

當(dāng)一個模塊被分割,你需要特別注意交叉引用的文件名。舉個例子,在這一章節(jié)中,B類需要訪問A類作為基類。用包的相對導(dǎo)入 from .a import A 來獲取。

整個章節(jié)都使用包的相對導(dǎo)入來避免將頂層模塊名硬編碼到源代碼中。這使得重命名模塊或者將它移動到別的位置更容易

作為這一章節(jié)的延伸,將介紹延遲導(dǎo)入。如圖所示,__init__.py文件一次導(dǎo)入所有必需的組件的。但是對于一個很大的模塊,可能你只想組件在需要時被加載。 要做到這一點(diǎn),__init__.py有細(xì)微的變化:

# __init__.pydef A(): from .a import A return A()def B(): from .b import B return B()

在這個版本中,類A和類B被替換為在第一次訪問時加載所需的類的函數(shù)。對于用戶,這看起來不會有太大的不同。 例如:

>>> import mymodule>>> a = mymodule.A()>>> a.spam()A.spam>>>

延遲加載的主要缺點(diǎn)是繼承和類型檢查可能會中斷。你可能會稍微改變你的代碼,例如:

if isinstance(x, mymodule.A): # Error...if isinstance(x, mymodule.a.A): # Ok...

延遲加載的真實(shí)例子, 見標(biāo)準(zhǔn)庫 multiprocessing/__init__.py 的源碼.

以上就是Python如何將將模塊分割成多個文件的詳細(xì)內(nèi)容,更多關(guān)于Python將模塊分割成多個文件的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 包装机_厂家_价格-山东包装机有限公司 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 广州印刷厂_广州彩印厂-广州艺彩印务有限公司 | 首页 - 张店继勇软件开发工作室| 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 | 分类168信息网 - 分类信息网 免费发布与查询 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | 好物生环保网、环保论坛 - 环保人的学习交流平台 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 卫生人才网-中国专业的医疗卫生医学人才网招聘网站! | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 光照全温振荡器(智能型)-恒隆仪器 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 领先的大模型技术与应用公司-中关村科金 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 万濠投影仪_瑞士TRIMOS高度仪_尼康投影仪V12BDC|量子仪器 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 高博医疗集团上海阿特蒙医院| 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | bng防爆挠性连接管-定做金属防爆挠性管-依客思防爆科技 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 |