Python 是否所有命名的耦合都应位于单独的文件中?

Python 是否所有命名的耦合都应位于单独的文件中?,python,python-2.7,code-organization,namedtuple,Python,Python 2.7,Code Organization,Namedtuple,我在Python代码库中使用了很多名为tuple的,它们散落在.py文件中。将所有这些声明提取到一个单独的文件中是一种好的做法,还是应该将它们保留在使用它们的地方 在一些情况下,其他模块需要在单独的模块中引用namedtuples,因为接口就是这样定义的-它们期望namedtuples。特别是对于跨模块引用,建议采用什么python方式组织各种命名元组?用于确定命名元组放置位置的思维过程与您将用于任何其他代码行的思维过程没有什么不同: 模块定义功能的逻辑单元。某些代码可能永远不需要了解另一段代

我在Python代码库中使用了很多名为tuple的
,它们散落在
.py
文件中。将所有这些声明提取到一个单独的文件中是一种好的做法,还是应该将它们保留在使用它们的地方


在一些情况下,其他模块需要在单独的模块中引用
namedtuples
,因为接口就是这样定义的-它们期望
namedtuples
。特别是对于跨模块引用,建议采用什么python方式组织各种
命名元组?

用于确定命名元组放置位置的思维过程与您将用于任何其他代码行的思维过程没有什么不同:

  • 模块定义功能的逻辑单元。某些代码可能永远不需要了解另一段代码或与之交互。这些边界线的标识是将代码分解为模块的有力提示

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

一旦确定了逻辑单元(即模块)和逻辑单元将通过其进行交互的API,就应该更清楚地将命名的耦合放在何处

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

但是,如果无论如何,
X
都需要导入
Y
,那么如果将命名的耦合放在一个单独的模块中,就不会有太大的区别,因为无论在哪里导入Y
都会导入Z


现在,通常情况下,
X
不需要
Y
提供的所有功能,因此您可能会尝试将
X
需要的较小的位分离到一个单独的模块中。但在某一点之后,将每一点分解成它自己的模块是疯狂的——拥有大量的小模块而不是一个中等大小的模块会变得更加繁重。这条线的位置——确切地说是中等大小的——是一个品味问题,也是您所设想的功能逻辑单元。

它们与可能包含某个模型的典型类相比没有什么特殊之处。一些应用程序堆栈建议数据类位于类似
model.py
content.py
的位置,但最终取决于您的应用程序/库的最佳组织方案。