MergeStrategy#

class astropy.utils.metadata.MergeStrategy[源代码]#

基类:object

基类,用于定义将来自左、右两个源的元数据合并到单个输出中的策略。

类的主要功能是 merge(cls, left, right) 类方法。这需要 leftright side参数并返回单个合并输出。

第一类属性是 types . 它被定义为一个元组(left_types,right_types)的列表,指示合并策略适用于哪些输入类型。在确定是否将此合并策略应用于一对(左、右)对象时,将执行以下测试: isinstance(left, left_types) and isinstance(right, right_types) . 例如::

types = [(np.ndarray, np.ndarray),  # Two ndarrays
         (np.ndarray, (list, tuple)),  # ndarray and (list or tuple)
         ((list, tuple), np.ndarray)]  # (list or tuple) and ndarray

为了方便起见, types 可以定义为单个二元组而不是两个元组的列表,例如。 types = (np.ndarray, np.ndarray) .

另一个类属性是 enabled ,默认为 False 在基类中。通过定义 MergeStrategy 新的合并策略会自动注册为可用于合并。但是,默认情况下,新的合并策略是 未启用 . 这可以防止无意中更改正在执行元数据合并操作的无关代码的行为。

在大多数情况下(特别是在其他人可能使用的库代码中),建议禁用自定义策略并使用 enable_merge_strategies 上下文管理器本地启用所需的策略。但是,如果有人确信新策略不会产生意外行为,那么可以通过设置 enabled 类属性到 True .

实例

在这里,我们定义了一个定制的合并策略,它在左右两边使用一个int或float,并返回一个包含两个值的列表。

>>> from astropy.utils.metadata import MergeStrategy
>>> class MergeNumbersAsList(MergeStrategy):
...     types = ((int, float), (int, float))  # (left_types, right_types)
...
...     @classmethod
...     def merge(cls, left, right):
...         return [left, right]

属性摘要

enabled 

属性文档

enabled = False#