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

前端之家收集整理的这篇文章主要介绍了有没有办法在Python中访问父模块前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要知道是否有办法从子模块访问父模块.如果我导入子模块:
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']

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

猜你在找的Python相关文章