有没有办法在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'] 您可以看到子进程中可见的大多数名称只是它导入的其他顶级模块. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |