您的位置:首页 > 编程语言 > Python开发

[Python]__init__.py 使用

2014-05-17 16:43 411 查看
如果需要建立一个python模块让其他地方可以导入并且使用就要在模块的目录下添加 __init__.py文件,通常情况下是空文件就可以了,只是要有这么个名称的文件。
但是我们翻看很多项目的源码的时候就发现,这个文件里有很多的代码,今天就来总结下__init__.py这个文件有哪些用途。

1 在需要封装成模块的目录下建立空的__init__.py文件,是的可以导入并使用此模块(这个是最基础的功能)
2  可以把同一个包下文件经常要导入的包,写在__init__.py 中,然后在文件中导入一次, 就把所有的需要的包导入到文件中了。
[reddit
 上有一则关于__init__.py使用的讨论,有兴趣可以看看​]

好多人也不建议这么做。

3  不仅仅是导入,可以在__init__.py中初始化对象,对于经常使用的对象导入简化点。
这是so上的一个回答 http://stackoverflow.com/questions/448271/what-is-init-py-for


Here is an example from one of my projects, in which I frequently import a 
sessionmaker
 called 
Session
 to
interact with my database. I wrote a "database" package with a few modules:
database/
   __init__.py
   schema.py
   insertions.py
   queries.py


My 
__init__.py
 contains
the following code:
import os

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine(os.environ['DATABASE_URL'])
Session = sessionmaker(bind=engine)


Since I define 
Session
 here,
I can start a new session using the syntax below. This code would be the same executed from inside or outside of the "database" package directory.
from database import Session
session = Session()


Of course, this is a small convenience -- the alternative would be to define 
Session
 in
a new file like "create_session.py" in my database package, and start new sessions using:
from database.create_session import Session
session = Session()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  init python