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.func1并X.func2应工作.
| 归档时间: |
|
| 查看次数: |
1662 次 |
| 最近记录: |