python包(多文件模块)的行为与一个大模块完全相同吗?

ola*_*ndo 10 python module package multifile

我刚刚读了一篇文章,据说我向我介绍了一个新概念:到目前为止,我确信python包(即带有__init__.py文件的目录)的行为与java包完全相同,即 - 用于帮助安排代码的小命名空间(减去java的"包"范围).但是,根据这个链接: 如果我把所有文件都放在同一个"包"中,那么简短的进入多文件模块:

整个文件集合作为单个模块呈现给其他Python代码 - 就像所有函数和类都在一个.py中一样

所以现在我认为我对python"包"的全部理解是错误的.而且 - 它完全不是一个包,而是作者所指的"多文件模块".

所以,根据我的理解,不管有多少文件我将我的funcs和类分成一个包,从外面那个包应该看起来好像我从包中的所有文件中取出了所有代码并把它放在一个大的改为使用与包相同名称的文件,即作为一个模块.

例如,如果我有以下文件结构:

/base
    /animals
        /__init__.py
        /dog.py
Run Code Online (Sandbox Code Playgroud)

在dog.py中:

def bark():
    print "woof"
Run Code Online (Sandbox Code Playgroud)

它应该与以下内容完全相同:

/base
    /animals.py
Run Code Online (Sandbox Code Playgroud)

并在animals.py中:

def bark():
    print 'woof'
Run Code Online (Sandbox Code Playgroud)

因此,下一段代码应该在两种情况下正常运行:

from base import animals
animals.bark()
Run Code Online (Sandbox Code Playgroud)

这当然会在第一种情况下产生:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'module' object has no attribute 'bark'
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?我通过例外看到"动物"确实被视为一个模块,但似乎我仍然需要明确说明animals.dog.bark,即包的内部文件结构不是从外部抽象出来的.

我错过了作者的观点,还是没有正确实现它?

===编辑===

只是为了确保在报价中没有人错过这一行:

好像所有的函数都在一个.py中

无论如何实际访问此funcs和类,上面的引用都明确指出,如果文件a中的func1和文件b中的func2,无论它们可以从哪个路径访问,如果我们将此路径表示为X,那么,根据上述报价,双方X.func1X.func2应工作.

Ign*_*ams 4

作者把事情想得太简单了。他说,下面的所有内容都animal可以被视为位于同一个模块中,尽管事实上, in 中的名称animal.dog将位于它们自己的命名空间中。