我正在寻找__init__.py
文件中的什么类型的代码,以及与此相关的最佳实践。或者,一般来说这是一种不好的做法吗?为什么我会在__init__.py文件中放入python代码
任何有关解释这一点的已知文件的参考也非常感谢。
我正在寻找__init__.py
文件中的什么类型的代码,以及与此相关的最佳实践。或者,一般来说这是一种不好的做法吗?为什么我会在__init__.py文件中放入python代码
任何有关解释这一点的已知文件的参考也非常感谢。
该领域的最佳实践之一是从您的库中导入所有需要的类(例如,查看mongoengine)。所以,你的库的用户可以这样做:
from coollibrary import OneClass, SecondClass
代替
from coollibrary.package import OneClass
from coollibrary.anotherpackage import SecondClass
而且,比较好的做法是包括__init__.py
版本的常
库和框架通常__init__.py
使用初始化代码文件整齐地隐藏内部结构并为用户提供统一的界面。
我们以Django表单模块为例。表单模块中的各种功能和类根据其分类在不同的文件中定义。
forms/
__init__.py
extras/
...
fields.py
forms.py
widgets.py
...
现在,如果你要创建一个表单,你必须知道在哪个文件中的每个函数的定义,你的代码来创建一个接触的形式将不得不是这个样子(这是incovenient和丑陋) 。
class CommentForm(forms.forms.Form):
name = forms.fields.CharField()
url = forms.fields.URLField()
comment = forms.fields.CharField(widget=forms.widgets.Textarea)
相反,在Django中,您可以直接从窗体名称空间引用各种窗口小部件,窗体,字段等。
from django import forms
class CommentForm(forms.Form):
name = forms.CharField()
url = forms.URLField()
comment = forms.CharField(widget=forms.Textarea)
这怎么可能?为了实现这一点,Django将以下语句添加到forms/__init__.py
文件中,该文件将所有小部件,窗体,字段等导入到forms
名称空间中。
from widgets import *
from fields import *
from forms import *
from models import *
正如你可以看到,在创建窗体时,这可以简化你的生活,因为现在你不必在每个函数/类定义担心,只需使用所有这些直接从forms
命名空间。这只是一个例子,但您可以在其他框架和库中看到类似的例子。
为了方便:其他用户不需要知道你的功能的确切位置。
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
然后其他人可以通过
from your_package import add
调用add()不知道文件1,像
from your_package.file1 import add
把一些初始化。例如,日志记录(这应该放在顶层):
import logging.config
logging.config.dictConfig(Your_logging_config)
的可能重复(http://stackoverflow.com/questions/448271/what [什么是__init__.py?] -is-INIT-PY-为) – Aamir 2011-04-29 11:01:34