Python的__init__.py是做什么的

190 阅读1分钟

 这几天碰到一个问题,运行脚本的时候__init__.py部分报错了,正好自己对这块不了解,就记录解决的过程,分享给大家!

操作步骤:

1、我的文件结构:

Project/
  testcases/
    __init__.py
    getuser_test.py
    save_test.py

2、在 getuser_test.py 里,定义了一个 TestCaseGetuser 的 Class 类:

# in getuser_test.py
class TestCaseGetuser():
    pass

3、然后在 save_test.py 里,我导入了该类:

# in save_test.py
from testcases import TestCaseGetuser

4、运行 save_test.py 时,报错

from testcases import TestCaseGetuser
ImportError: cannot import name 'TestCaseGetuser' from 'testcases' (D:\Test\Project\testcases__init__.py)

解决方法:

Python 3.x:

# in __init__.py
from.getuser_test import TestCaseGetuser

在模块名称前放置一个.,可以告诉Python你正在加载的模块位于当前模块的目录内。

init.py 是做什么的?

平时,看一些 Python 相关的项目时,常常会看到 init.py,当你使用某些编辑器创建 Python Package 的时候,它也会自动给你生成一个 init.py 文件。 ****下面我们就看看__init__.py 到底是做什么用的。

有两个主要用途:

1、为方便起见:其他用户不需要知道你的函数在包层次结构中的确切位置。

your_package/
  __init__.py
  file1.py
  file2.py
    ...
  fileN.py

# in __init__.py
from file1 import *
from file2 import *
...
from fileN import *

# in file1.py
def add():
    pass

其他人可以通过以下方式调用add():

from your_package import add

知道 add()位置的话,可以: 

from your_package.file1 import add

2、如果你想初始化一些东西;例如,日志记录(应放在顶层): 

# in __init__.py
import logging.config
logging.config.dictConfig(Your_logging_config)

\