python模块引用梳理
2016-08-22 11:06
239 查看
文件组织结构:
A.py
B.py
执行:
python t/main.py
问题1:
在main.py中引用t2/B的test方法,如何写?
方式1: from xxx import xxx
这个写法很糟糕, 但能解决目前问题。糟糕的地方在于隐晦的引入t2。更好的方式是相对引用。
但如果用 python t/main.py执行会报错,此处原因请参考这。原因是相对引用默认作为包的方式才能运行。
正确执行方法(linux shell下): python -m t.main
这个写法也不够好!B在具体的代码行,看不出其出处。更好的方式是
但运行时会报错!
AttributeError: 'module' object has no attribute 'B'
大致意思是, 模块对象没有B属性!这点从java/.net转过来的也许有一点不习惯!
pythony引入一个模块(import m) <==> 引入m/__init__.py文件,里面有啥就有啥,反之亦然。
破解方法:
1. 不太好的方法有上一个代码例子, 即: from ... import ...
2. 在模块的__init__.py文件中自动引入这些文件, 推荐最为最佳实践!
此处修改 t/t2/__init__.py文件
这样问题就完美结果了。总结下,最佳实践demo如下:
t/main.py
t/t2/__init__.py
即:
1. 相对引用
2. 尽量引入更顶层包
3. 通过命名空间引用具体的方法或者类
4. 被引用包(子包)需要在__init__.py中声明(import)可以被外部直接访问的文件
问题2:
在t2/B中如何引用t1/A的test方法?
t/t2/B.py
同时声明A
t/t1/__init__.py
转载请注明本文来源:http://www.cnblogs.com/Tommy-Yu/p/5794829.html
谢谢!
t ├── __init__.py ├── main.py ├── t1 │ ├── A.py │ └── __init__.py └── t2 ├── B.py └── __init__.py
A.py
def test(): print 't.t1.A.test()'
B.py
def test(): print 't.t2.B.test()'
执行:
python t/main.py
问题1:
在main.py中引用t2/B的test方法,如何写?
方式1: from xxx import xxx
from t2 import B B.test()
这个写法很糟糕, 但能解决目前问题。糟糕的地方在于隐晦的引入t2。更好的方式是相对引用。
from .t2 import B B.test()
但如果用 python t/main.py执行会报错,此处原因请参考这。原因是相对引用默认作为包的方式才能运行。
正确执行方法(linux shell下): python -m t.main
这个写法也不够好!B在具体的代码行,看不出其出处。更好的方式是
from . import t2 t2.B.test()
但运行时会报错!
AttributeError: 'module' object has no attribute 'B'
大致意思是, 模块对象没有B属性!这点从java/.net转过来的也许有一点不习惯!
pythony引入一个模块(import m) <==> 引入m/__init__.py文件,里面有啥就有啥,反之亦然。
破解方法:
1. 不太好的方法有上一个代码例子, 即: from ... import ...
2. 在模块的__init__.py文件中自动引入这些文件, 推荐最为最佳实践!
此处修改 t/t2/__init__.py文件
import B
这样问题就完美结果了。总结下,最佳实践demo如下:
t/main.py
# -*- coding:utf-8 -*- from . import t2 t2.B.test()
t/t2/__init__.py
# -*- coding:utf-8 -*- from . import B
即:
1. 相对引用
2. 尽量引入更顶层包
3. 通过命名空间引用具体的方法或者类
4. 被引用包(子包)需要在__init__.py中声明(import)可以被外部直接访问的文件
问题2:
在t2/B中如何引用t1/A的test方法?
t/t2/B.py
from .. import t1 t1.A.test()
同时声明A
t/t1/__init__.py
from . import A
转载请注明本文来源:http://www.cnblogs.com/Tommy-Yu/p/5794829.html
谢谢!
相关文章推荐
- Python中模块之间变量引用的方法说明
- python消除print的换行符、引用模块和异常处理
- 关于python中模块的环状引用(circular imports)
- python中自定义模块的引用
- Python跨文件引用模块
- Python中自定义模块的引用
- Python模块引用问题
- Python多模块全局变量引用和修改
- Python引用模块和查找模块路径
- Python 引用多个模块,调用模块中的函数时...要注意的地方
- python 不同包间模块引用
- Python全局变量在模块之间引用的问题
- Python模块的交叉引用问题
- Python time datetime 模块梳理
- python模块交叉引用问题
- python 3.3 引用模块 小例
- Python模块的交叉引用(导入循环)问题分析
- python 模块被引用多次但是里面的全局表达式总共只会执行一次
- Python引用模块和查找模块路径