由于我更喜欢小文件,我通常会为每个Python模块放置一个"公共"类.我将模块命名为与其包含的类相同的名称.因此,例如,ToolSet将在中定义类ToolSet.py.
在一个包中,如果另一个模块需要实例化ToolSet类的对象,我使用:
from ToolSet import ToolSet
...
toolSet = ToolSet()
Run Code Online (Sandbox Code Playgroud)
代替:
import ToolSet
...
toolSet = ToolSet.ToolSet()
Run Code Online (Sandbox Code Playgroud)
我这样做是为了减少"口吃"(我更喜欢在文件顶部比在我的代码中口吃.)
这是一个正确的习语吗?
这是一个相关的问题.在一个软件包中,我经常会有一些我希望向外界展示的课程.这些我在__init__.pyfor package中导入.例如,如果ToolSet在包中UI并且我想要公开它,我会将以下内容放入UI/__init__.py:
from ToolSet import ToolSet
Run Code Online (Sandbox Code Playgroud)
所以,从外部模块我可以写
import UI
...
toolSet = UI.ToolSet()
Run Code Online (Sandbox Code Playgroud)
再次,这是pythonic?
为了回答你的第一个问题,这就是我使用的习语,它的使用得到了PEP8 python样式指南的支持
可以这样说:
来自子进程导入Popen,PIPE
我喜欢它,因为它减少了键入并确保文件运行时出现问题(比如你错误拼写导入),而不是一段时间后运行使用导入的函数.
例如,假设模块Thing没有Thyng成员
from Thing import Thyng
Run Code Online (Sandbox Code Playgroud)
你运行.py文件后立即出错,而
import Thing
# ...
def fn():
Thing.Thyng()
Run Code Online (Sandbox Code Playgroud)
在你跑步之前不会出错 fn()
至于你的第二个问题,我认为这也是一个很好的做法.当我将一个large.py计入带有__init__.py和实现文件的目录时,经常会发生这种情况.将内容导入到__init__.py保持界面相同.这也是标准库中的常见做法.
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |