【问题标题】:The `__init__.py` import multiple modules while they are not utilized within the file`__init__.py` 导入多个模块,而文件中未使用它们
【发布时间】:2018-10-19 17:51:17
【问题描述】:

我正在阅读/django/forms/__init__.py

"""
Django validation and HTML form handling.
"""

from django.core.exceptions import ValidationError  # NOQA
from django.forms.boundfield import *  # NOQA
from django.forms.fields import *  # NOQA
from django.forms.forms import *  # NOQA
from django.forms.formsets import *  # NOQA
from django.forms.models import *  # NOQA
from django.forms.widgets import *  # NOQA

__init__.py 导入多个模块,而文件中未使用它们。

我假设他们可能会被住在同一个目录中的其他人雇用,Django 如何实现这一点?

【问题讨论】:

  • 我不清楚你的问题是什么。这些导入允许用户执行 from django.forms import Formfrom django.forms import ModelForm 之类的导入,而不是 from django.forms.forms import Formfrom django.forms.models import ModelForm
  • 但是,__init__ 后面没有代码。 @Alasdair
  • 请注意#NOQA 的存在,这种方法可能“看起来很糟糕”,Django 理解并声明:它们的存在是出于某种原因。正如@Alasdair 在上面的评论中解释的那样
  • 知道了,非常感谢@Lemayzeur

标签: django design-patterns facade


【解决方案1】:

__init__.py 导入多个模块

s/modules/names/ - from somemodule import somename 语法公开了 somename 名称,而不是 somemodule

虽然它们没有在文件中使用。 我认为他们可能会被住在同一目录中的其他人雇用

实际上这是一种称为“外观”的设计模式 - forms 包隐藏了它的内部实现(其中定义了子模块/子包)所以

1/ 用户只需从django.forms 导入他们需要的内容,而无需关心底层模块/子包层次结构,

2/ 维护者可以在不破坏客户端代码的情况下重新组织底层模块/子包层次结构。

Django 如何做到这一点?

这不是 Django 特有的,它只是普通的 Python。阅读 Python 关于模块和包的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 2013-04-21
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2021-09-13
    相关资源
    最近更新 更多