Python的__init__.py文件小議(二)

之前提到了,__init__.py文件中可以導(dǎo)入一些包,通過(guò) __all__開(kāi)放給外部使用。
但是我為什么不領(lǐng)情呢?

之前用tornado,__init__.py基本都是空文件,只用來(lái)表征當(dāng)前目錄是一個(gè)python module。后來(lái)用flask, django 發(fā)現(xiàn)很多項(xiàng)目中都會(huì)在__init__.py 寫代碼。就像下面代碼中注釋:

因?yàn)?strong>init.py 中的這些工作,你可以通過(guò)下面的寫法來(lái)使用 connect

from mongoengine import connect  # style 1

如果沒(méi)有__init__.py 中的這些配置,則需要:

from mongoengine.connection import connect   # style 2

但是我更喜歡style2。
先不說(shuō)讓人深惡痛絕的import *, 當(dāng)時(shí)我去閱讀源碼的時(shí)候就很糾結(jié)。
當(dāng)我看到sytle1 的時(shí)候,我是懵逼的。
因?yàn)樵创a中mongoengine目錄下并沒(méi)有一個(gè)名為connect.py的文件。mongoengine目錄下有一大堆py文件,我也不知道connect 方法是屬于哪個(gè)py文件。

# filename: mongoengine/__init__.py
# url: https://github.com/jiaxiaolei/mongoengine/blob/master/mongoengine/__init__.py

# Import submodules so that we can expose their __all__
from mongoengine import connection
from mongoengine import document
from mongoengine import errors
from mongoengine import fields
from mongoengine import queryset
from mongoengine import signals

# Import everything from each submodule so that it can be accessed via
# mongoengine, e.g. instead of `from mongoengine.connection import connect`,
# users can simply use `from mongoengine import connect`, or even
# `from mongoengine import *` and then `connect('testdb')`.
from mongoengine.connection import *
from mongoengine.document import *
from mongoengine.errors import *
from mongoengine.fields import *
from mongoengine.queryset import *
from mongoengine.signals import *


__all__ = (list(document.__all__) + list(fields.__all__) +
           list(connection.__all__) + list(queryset.__all__) +
           list(signals.__all__) + list(errors.__all__))


VERSION = (0, 14, 0)


def get_version():
    """Return the VERSION as a string, e.g. for VERSION == (0, 10, 7),
    return '0.10.7'.
    """
    return '.'.join(map(str, VERSION))


__version__ = get_version()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容