Python:如何访问父模块中声明的变量

Mal*_*ous 11 python import

使用Python文档中的结构:

sound/
  __init__.py
  effects/
          __init__.py
          echo.py
          surround.py
          reverse.py
Run Code Online (Sandbox Code Playgroud)

说我想要import sound.effects并获得可用效果的列表.我可以在声明模块级变量做到这一点sound.effects,然后当每个.py文件导入追加到它.所以声音/效果/ __ init__.py可能是这样的:

effectList = []
import echo
import surround   # Could write code to import *.py instead
...
Run Code Online (Sandbox Code Playgroud)

从我的主代码我现在可以访问sound.effects.effectList以获取效果列表,但如何effectList从echo.py中访问以进行实际追加?我被困在试图访问变量:

# None of these work :-(
# from . import self
# from .. import effects
# import sound.effects

sound.effect.effectList.append({'name': 'echo'})
Run Code Online (Sandbox Code Playgroud)

Eri*_*arr 7

人们在这种情况下通常做的是在模块中创建一个common.py文件.

sound/
  __init__.py
  effect/
          __init__.py
          common.py
          echo.py
          surround.py
          reverse.py
Run Code Online (Sandbox Code Playgroud)

然后将代码移动__init__.pycommon.py:

effectList = []
import echo
import surround   # Could write code to import *.py instead
...
Run Code Online (Sandbox Code Playgroud)

在里面__init__.py你有这个:

from common import *
Run Code Online (Sandbox Code Playgroud)

所以现在echo.py你有这个:

import common
common.effectList.append({'name': 'echo'})
Run Code Online (Sandbox Code Playgroud)

任何导入声音的东西都会像这样使用它

import sound.effect

for effect_name,effect in sound.effect.effectlist.items():
    #....
Run Code Online (Sandbox Code Playgroud)

我自己刚开始使用它,但我相信这是python社区的常见做法.