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

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

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

解决方法

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

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

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

所以,例如:

  1. >>> import subprocess
  2. >>> dir(subprocess)
  3. ['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']
  4. >>> subprocess.__all__
  5. ['Popen','CalledProcessError']

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

猜你在找的Python相关文章