![]() | 1 binux 2012-02-17 17:43:02 +08:00 a.t.aa() ? |
![]() | 4 janusle OP |
![]() | 5 janusle OP @binux 有点看懂了 我其实还是不理解 为什么 a能import到b的内容 我理解的是 python搜索应该是 向下搜索啊 这个时候 a的__init__.py在a下面 怎么能够找到上层目录(a)的同级目录b里面的内容呢? |
![]() | 6 binux 2012-02-17 19:19:21 +08:00 @janusle 不是,当你在abc这一级执行的时候,搜索目录是包含./的,在这一层当然是能找到b的 你可以这么测试,在a的目录中执行python __init__.py,这时候就找不到b了 然后 你在a/__init__.py中加上 print sys.path 执行abc.py的时候,就知道查找路径了 |
![]() | 7 janusle OP @binux 有点明白了 再问一个问题 如果在./a/__init__.py 里面的放入t.aa() 我在abc这一级执行的时候 python再前面加了包名 则变成a.t.aa() 是这样么? |
![]() | 8 binux 2012-02-17 19:42:58 +08:00 @janusle 不是这个原因 from b import t 这一句话已经将t导入当前的命名空间里了,那就可以直接t.aa()了 如果你在abc.py中这么写 from a import t 也是一样可以t.aa()的 import a 只是将module a导入到当前命名空间中,而不是a里面的东西。 |
10 clowwindy 2012-02-17 21:40:15 +08:00 推荐在所有文件里import都写绝对模块名,不要用相对的模块名,增加可读性。 http://www.python.org/dev/peps/pep-0008/ |