前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python常见的import导包技巧

python常见的import导包技巧

作者头像
用户4945346
发布2020-09-23 14:28:22
9500
发布2020-09-23 14:28:22
举报
文章被收录于专栏:pythonista的日常pythonista的日常

1.控制模块被全部导入的内容

当使用’from module import *’ 语句时,希望对从模块或包导出的符号进行精确控制。在你的模块中定义一个变量 “_ all _” 来明确地列出需要导出的内容。

代码语言:javascript
复制
# somemodule.py
def spam():
    pass
def grok():
    pass
blah = 42
# Only export 'spam' and 'grok'
__all__ = ['spam', 'grok']

尽管强烈反对使用 ‘from module import *’, 但是在定义了大量变量名的模块中频繁使用。如果你不做任何事, 这样的导入将会导入所有不以下划线开头的。另一方面,如果定义了 “_ all _” , 那么只有被列举出的东西会被导出。

如果你将 “_ _all__" 定义成一个空列表, 没有东西将被导入。如果 " _all _” 包含未定义的名字, 在导入时引起AttributeError。

2.将模块分割成多个文件

你想将一个模块分割成多个文件。但是你不想将分离的文件统一成一个逻辑模块时使已有的代码遭到破坏。 程序模块可以通过变成包来分割成多个独立的文件。考虑下下面简单的模块:

代码语言:javascript
复制
# mymodule.py
class A:
    def spam(self):
        print('A.spam')

class B(A):
    def bar(self):
        print('B.bar')

假设你想把 mymodule.py 分为两个文件,每个定义的一个类。要做到这一点,首先用mymodule目录来替换文件mymodule.py。在这个目录下,创建以下文件:

代码语言:javascript
复制
mymodule/
    __init__.py
    a.py
    b.py

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

代码语言:javascript
复制
# a.py
class A:
    def spam(self):
        print('A.spam')

在b.py文件中插入以下代码

代码语言:javascript
复制
# b.py
from .a import A
class B(A):
    def bar(self):
        print('B.bar')

最后,在 _ init _.py 中,将2个文件粘合在一起:

代码语言:javascript
复制
# __init__.py
from .a import A
from .b import B

如果按照这些步骤,所产生的包MyModule将作为一个单一的逻辑模块:

代码语言:javascript
复制
>>> import mymodule
>>> a = mymodule.A()
>>> a.spam()
A.spam
>>> b = mymodule.B()
>>> b.bar()
B.bar
>>>
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 pythonista的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.控制模块被全部导入的内容
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档