在package _init__u; py.py文件中定义的导入范围是什么? 对于一个项目,我不得不从C++切换到Python,但是我在理解我在\uuuu init\uuuu.py文件中找到了以下文档:

在package _init__u; py.py文件中定义的导入范围是什么? 对于一个项目,我不得不从C++切换到Python,但是我在理解我在\uuuu init\uuuu.py文件中找到了以下文档:,python,python-2.7,python-import,Python,Python 2.7,Python Import,为了更熟悉\uuuu init\uuuu.py文件的工作方式,我在Python2.7和3.6.5中进行了一些测试。为此,我使用了“PythonCentral”测试包(参见链接2): 现在,我了解了关于\uuuu init\uuuuuuy.py文件的以下内容: 导入模块或子包模块时,将执行\uuuu init\uuuuuuuuuuuuuuuuuuuuuupy.py文件 \uuuu init\uuuu.py可用于重载包\uuuuu all\uuuu方法 \uuuu init\uuuu.py可用于

为了更熟悉
\uuuu init\uuuu.py
文件的工作方式,我在Python2.7和3.6.5中进行了一些测试。为此,我使用了“PythonCentral”测试包(参见链接2):

现在,我了解了关于
\uuuu init\uuuuuuy.py
文件的以下内容:

  • 导入模块或子包模块时,将执行
    \uuuu init\uuuuuuuuuuuuuuuuuuuuuupy.py
    文件
  • \uuuu init\uuuu.py
    可用于重载包
    \uuuuu all\uuuu
    方法
  • \uuuu init\uuuu.py
    可用于定义导入订单
  • \uuuu init\uuuu.py
    可用于使类在包和子包级别可用
在我的主文件范围内使用不同的模块和类似乎符合文档中的说明。然而,当尝试使用在另一个子包模块中定义的类时,我遇到了麻烦。在python 2.7中,在subanimals子包中创建了以下
\uuuu init\uuuu.py
文件:

from Mammals import Mammals

print "subpackage __init__.py executed"
接下来,我在Bird.py模块中创建了以下代码:

class Birds:
    def __init__(self):
        ''' Constructor for this class. '''
        # Create some member animals
        self.members = ['Sparrow', 'Robin', 'Duck']


    def printMembers(self):
        print('Printing members of the Birds class')
        for member in self.members:
           print('\t%s ' % member)

        test = Mammals()
        test.printMembers
运行以下主脚本时:

    from animals.subanimals import Birds

test = Birds()
test.printMembers()
我一直没有定义全局名称。在Python2.7中,我可以通过在Birds.py的顶部添加“从哺乳动物导入哺乳动物”来解决这个问题


\uuuu init\uuuuu.py
是否只导入主脚本作用域级别的包和类,因此不在Birds.py模块内,或者我做了其他错误的事情?

我的问题的答案可以在@jonrsharpe的评论中找到


每个单独的文件必须单独有效,定义所有 适当的进口init.py用于在中聚合多个文件 将目录转换为单个模块;将其视为分组和传递 属性向上延伸到父级,而不是向下延伸到该父级中的其他文件 目录


每个文件必须单独有效,定义所有适当的导入
\uuuu init\uuuuu.py
用于将目录中的多个文件聚合到单个模块中;可以将其视为分组并向上传递属性到父级,而不是向下传递到该目录中的其他文件。我看不出您要在何处导入哺乳动物,从哺乳动物添加将哺乳动物导入Birds.py,还请避免将文件以相同的方式命名到子目录中,这只是增加了混乱和不必要的行为。@ Jon RaSpe,如果我正确理解了,IIT.PY文件只针对上面描述的函数,不能用和C++头文件类似的方式使用。因此,在python中,我必须在所有py文件中定义所有导入?@simoneZandara Yea我尝试了这一点,解决了这个错误,但我想知道是否可以使用_init_uz.py作为某种头文件(相当于C++),在其中我可以指定所有包导入。从你和Jornsharpe的评论来看,这似乎是不可能的。@Jornsharpe也非常感谢你改进了我问题的格式,我将在我提出的其他问题中使用你的风格。