我在python代码库中使用了很多namedtuple文件,它们散落在.py文件中。将所有这些声明提取到一个单独的文件中是一个好的实践,还是应该放在使用它们的地方?
在少数情况下,其他模块需要在单独的模块中使用引用namedtuples,因为接口就是这样定义的-它们期望namedtuples推荐的pythonic组织各种namedtuples的方法是什么,特别是对于跨模块引用?

最佳答案

用于决定将namedtuples放置在何处的思想过程与用于任何其他代码行的思想过程没有什么不同:
模块定义功能的逻辑单元。某些代码片段可能永远不需要知道或与另一段代码交互。这些边界线的标识是将代码分解为模块的有力提示。
模块封装接口它们使您有机会定义一个API,通过它所有其他代码片段都可以进行交互,同时在模块中隔离其实现的细节在模块中隔离代码可以使您更容易地知道在保留api的同时更改实现时应将注意力集中在哪里。
一旦确定了逻辑单元(即模块)和逻辑单元将通过其进行交互的API,就应该更清楚地知道在哪里放置namedtuples。
如果一个模块,X需要导入另一个模块,Y,除了定义namedtuples之外,没有其他原因,那么将namedtuples放在一个单独的模块中是有意义的,因为您已经找到了一条边界线。
但是,如果无论如何,Z都需要导入X,那么如果将命名的耦合放在一个单独的模块中,就不会有太大的区别,因为无论您在哪里Y都会import Y
现在,通常情况下import Z不需要X提供的所有功能,因此您可能会尝试将Y需要的较小的位分离到单独的模块中。但在某种程度上,将每一个小模块分解成自己的模块是疯狂的——拥有大量的小模块而不是一个中型模块会变得更加繁重这条线在哪里——确切地说是中等规模的——是一个品味的问题,也是您所设想的功能的逻辑单元。

07-26 04:35