所有命名元组都应该位于单独的文件中吗?

PhD*_*PhD 3 python code-organization namedtuple python-2.7

我在 Python 代码库中使用了相当多的namedtuples,它们散落在.py文件中。将所有这些声明提取到单独的文件中是一个好习惯还是应该将它们保留在使用的地方?

在某些情况下,其他模块需要namedtuples在单独的模块中使用引用,因为这就是接口的定义方式 - 他们期望如此namedtuples。组织各种namedtuples特别是跨模块引用的推荐的 Pythonic 方式是什么?

unu*_*tbu 5

用于决定将命名元组放置在何处的思考过程与用于任何其他代码行的思考过程没有什么不同:

  • 模块定义功能的逻辑单元。某些代码段可能永远不需要了解另一段代码或与另一段代码交互。这些边界线的识别强烈暗示了在哪里将代码分解为模块。

  • 模块封装了一个接口。它们使您有机会定义一个 API,所有其他代码片段都可以通过该 API 进行交互,同时隔离其在模块中的实现细节。当您想要在保留 API 的同时更改实现时,隔离模块中的代码可以让您更轻松地了解应将注意力集中在哪里。

一旦您确定了逻辑单元(即模块)以及逻辑单元交互所用的 API,就应该更清楚在哪里放置命名元组。

如果一个模块X需要导入另一个模块 ,Y除了命名元组的定义之外没有其他原因,那么将命名元组放置在单独的模块中可能是有意义的,Z因为您已经找到了一条边界线。

但是,如果无论如何X都需要导入Y,那么如果将命名元组放置在单独的模块中,实际上不会有太大区别,因为您import Y也可以在任何地方import Z

现在,通常情况下X不需要提供的所有功能Y,因此您可能会想将X需要的较小部分分离到单独的模块中。但在某一点之后,将每一点都分解成它自己的模块是疯狂的——拥有许多小模块而不是一个中等大小的模块会变得更加繁重。该线的位置(确切地说是中等大小)取决于品味以及您设想的功能逻辑单元。