以编程方式更改Python方法参数名称

时间:2016-06-01 14:45:07

标签: python parameters

我不打算更改方法的实际签名

我不想使用新参数名称

创建新方法

如何在方法的签名中修改参数的名称?

我在自定义内部框架上为Spark Streaming作业创建一个抽象类,它需要一个参数名称来匹配Kafka主题的名称,否则它会将参数作为可选标记。

以下是有问题的方法:

 def apply(self, sc, records):

    if not self.FILTER_FIELDS:
        raise Exception('SalesForceTransformStage requires FILTER_FIELDS:[_label_,[_values_]]')

    return shipping_label \
        .filter(lambda rec: rec[self.FILTER_FIELDS[0]] in self.FILTER_FIELDS[1]) \
        .filter(self.filters) \
        .map(lambda rdd: format_record_keys_for_salesforce(rdd,
                                                           self.SALESFORCE_FIELD_MAP,
                                                           self.SALESFORCE_FIELD_LIMITS,
                                                           self.INPUTS[self.INPUTS.keys()[0]])) \
        .map(self.mappers) \
        .map(self.OUTPUT.project_row)

现在,参数records被选为可选标志,因此当我运行脚本时,会发生这种情况:

usage: new_shipping_label_event.py [-h] [--force-rebuild] --records RECORDS
                               [--save-to SAVE_TO]
new_shipping_label_event.py: error: argument --records is required

但是,将参数名称更改为shipping_label(kafka主题的名称),可以正常运行脚本。如何以编程方式设置参数的名称?

1 个答案:

答案 0 :(得分:2)

records一个默认值,因此它是可选的。

def apply(self, sc, records=None):