我正在尋找__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