如何处理“公共接口”和“内部使用”的Python包内容?
我正在将一些单文件Python模块重构为多文件包,并且我反复遇到相同的问题模式:我有一些对象是包的公共接口的一部分,但也必须由包的子模块在内部使用如何处理“公共接口”和“内部使用”的Python包内容?,python,Python,我正在将一些单文件Python模块重构为多文件包,并且我反复遇到相同的问题模式:我有一些对象是包的公共接口的一部分,但也必须由包的子模块在内部使用 mypackage/ __init__.py # <--- Contains object 'cssURL' views.py # <--- Needs to use object 'cssURL' 然而,如果我每次都这样做,似乎子模块的数量会成倍增加。此外,客户机现在必须将mypackage.cssURL称为
mypackage/
__init__.py # <--- Contains object 'cssURL'
views.py # <--- Needs to use object 'cssURL'
然而,如果我每次都这样做,似乎子模块的数量会成倍增加。此外,客户机现在必须将mypackage.cssURL称为mypackage.style.cssURL,否则我必须在_init__; py.py中创建一个同义词,如下所示:
import style
cssURL = style.cssURL
我想我做错了什么。有没有更好的方法来处理这些类型的包成员,它们既是公共接口的一部分,又是内部使用的?据我所知,首选的方法是在uu init_uu.py中创建一个同义词,并使用from.style import cssURL;cf..据我所知,首选的方法是使用from.style import cssURL在_init__.py中创建同义词;cf..我将按照以下方式构建它:
/mypackage
__init__.py
from style import cssURL
...
style.py
cssURL = '...' # or whatever
...
views.py
from .style import cssURL
...
如果同一个包中的其他模块需要它们,我不会在_init__u; py.py中定义名称;只需在那里创建一个别名供外部使用者使用。我将按如下方式构造它:
/mypackage
__init__.py
from style import cssURL
...
style.py
cssURL = '...' # or whatever
...
views.py
from .style import cssURL
...
如果同一个包中的其他模块需要它们,我不会在_init__u; py.py中定义名称;只需在那里创建一个别名供外部使用者使用。您可以将当前软件包称为:
有关更多信息,请参阅。您可以将当前软件包称为:
有关详细信息,请参阅。或从样式导入cssURL放入\uuuu init\uuuuu.py。。。cssURL当前在哪里,只是在uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。。。cssURL目前在哪里,刚刚定义在_init__u; py本身?这里的一致性让我感到鼓舞。我想知道这个策略对pydoc生成的文档有什么影响?我会看到的。@DavidCharles任何docstring都是通过导入实现的,所以我不希望出现任何问题。是的,cssURL出现在pydoc为mypackage生成的HTML中。非常感谢。是的,cssURL由pydoc呈现,但是它不呈现docstring,因为cssURL是一个普通字符串。所有这些内容都进入“数据”部分。所以,我决定用一个同名函数来公开。@DavidCharles字符串不能有docstring,所以我认为这不会有什么不同。我对这里的一致性感到鼓舞。我想知道这个策略对pydoc生成的文档有什么影响?我会看到的。@DavidCharles任何docstring都是通过导入实现的,所以我不希望出现任何问题。是的,cssURL出现在pydoc为mypackage生成的HTML中。非常感谢。是的,cssURL由pydoc呈现,但是它不呈现docstring,因为cssURL是一个普通字符串。所有这些内容都进入“数据”部分。所以,我决定用一个同名函数来公开。@DavidCharles字符串不能有docstring,所以我认为这不会有什么不同
# views.py
from . import cssURL