加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

有没有办法在Python中访问父模块

发布时间:2020-12-16 23:35:54 所属栏目:Python 来源:网络整理
导读:我需要知道是否有办法从子模块访问父模块.如果我导入子模块: from subprocess import types 我有类型 – 是否有一些Python魔法可以从类型访问子进程模块?类似于类().__ class __.__ bases __ [0] .__ subclasses __(). 解决方法 如果您访问过模块,通常可以
我需要知道是否有办法从子模块访问父模块.如果我导入子模块:
from subprocess import types

我有类型 – 是否有一些Python魔法可以从类型访问子进程模块?类似于类().__ class __.__ bases __ [0] .__ subclasses __().

解决方法

如果您访问过模块,通常可以从sys.modules字典中访问它. Python没有使用名称保留“父指针”,特别是因为这种关系不是一对一的.例如,使用您的示例:
>>> from subprocess import types
>>> types
<module 'types' from '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/types.pyc'>
>>> import sys
>>> sys.modules['subprocess']
<module 'subprocess' from '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.pyc'>

如果您注意到子进程模块中存在的类型只是其中的import types语句的工件.如果需要该模块,只需导入类型即可.

实际上,子进程的未来版本可能不再导入类型,并且您的代码将会中断.您只应导入出现在模块的__all__列表中的名称;将其他名称视为实现细节.

所以,例如:

>>> import subprocess
>>> dir(subprocess)
['CalledProcessError','MAXFD','PIPE','Popen','STDOUT','_PIPE_BUF','__all__','__builtins__','__doc__','__file__','__name__','__package__','_active','_cleanup','_demo_posix','_demo_windows','_eintr_retry_call','_has_poll','call','check_call','check_output','errno','fcntl','gc','list2cmdline','mswindows','os','pickle','select','signal','sys','traceback','types']
>>> subprocess.__all__
['Popen','CalledProcessError']

您可以看到子进程中可见的大多数名称只是它导入的其他顶级模块.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读