Python 在哪里放置用于在两个数据集之间创建映射的规则?

Python 在哪里放置用于在两个数据集之间创建映射的规则?,python,class,design-patterns,Python,Class,Design Patterns,我有一个类MasterData,它的实例包含一些关于所有可能的小工具的一般信息 我有另一个类CustomerData,其实例包含: 客户向我们提供的关于这些小工具子集的一些特定信息 在MasterData CustomerData构造函数将以下内容作为参数: 客户提供的文件 我为每个客户编写的Python模块,以模块级变量的形式包含关于客户文件的各种细节;e、 例如,它表示哪个客户字段包含产品标识符;等等 链接非常简单,只需从客户文件中获取适当的ID并在主数据的适当字段中查找即可。客户模

我有一个类
MasterData
,它的实例包含一些关于所有可能的小工具的一般信息

我有另一个类
CustomerData
,其实例包含:

  • 客户向我们提供的关于这些小工具子集的一些特定信息
  • MasterData
CustomerData
构造函数将以下内容作为参数:

  • 客户提供的文件
  • 我为每个客户编写的Python模块,以模块级变量的形式包含关于客户文件的各种细节;e、 例如,它表示哪个客户字段包含产品标识符;等等
链接非常简单,只需从客户文件中获取适当的ID并在主数据的适当字段中查找即可。客户模块中提供了包含相关ID(客户和主ID)的字段的名称。实际链接是在
CustomerData
构造函数中执行的

在我们提出新的、更加复杂的匹配规则之前,一切都很顺利。每个匹配规则只适用于特定的客户,因此我想将所有可能的匹配规则放在“每个客户”模块中,然后让应用程序选择要使用的规则。但不幸的是,新的匹配规则要求对主数据进行操作,模块自然是一个“被动”对象,甚至没有到主数据的链接

我是否应该在以主数据实例和客户记录为参数的模块中创建全局函数,并返回主数据记录

或者我应该把匹配规则放在其他地方

我是否应该在以主数据实例和客户记录为参数的模块中创建全局函数,并返回主数据记录

一般来说

我为每个客户编写的Python模块,以模块级变量的形式包含关于客户文件的各种细节;e、 例如,它表示哪个客户字段包含产品标识符;等等

这不应该是一个模块。这没有错。但这可能令人困惑

考虑改变一些东西,这样你就有了这样的东西

class AbstractCustomerData( object ):
   """Generic features common to all customer data."""
那么。每个客户都有一个模块

from the_master_copy import AbstractCustomerData

class ThisCustomerData( AbstractCustomerData ):
    """All the various kinds of overrides and whatnot."""
    def the_matching_rule( self, master_data_object_or_collection_or_whatever ):
        """This customer's override."""
这样,您就可以在customer模块中使用
ThisCustomerData
实例。模块不是任何东西的参数;该模块包含客户代码

客户安装的应用程序如下所示

import generic_stuff
from customer_module import ThisCustomerData, other_feature, yet_more
现在,您可以从generic_stuff以及从客户的扩展模块导入的客户特定覆盖构建客户特定的应用程序实例

这样做的好处是允许更多的自由,因为您不局限于将模块插入类中。您正在使用模块来包含一个类定义,该类定义现在可以执行任何操作