在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
\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也非常感谢你改进了我问题的格式,我将在我提出的其他问题中使用你的风格。