Ich suche nicht die tatsächliche Signatur der Methodeändern Python-Methode Parameternamen programmatisch
Ich will nicht zu ändern, um eine neue Methode mit neuen Parameternamen erstellen
Wie kann ich ändern der Name eines Parameters in der Signatur einer Methode?
Ich erstelle eine abstrakte Klasse für einen Spark-Streaming-Auftrag in einem benutzerdefinierten internen Framework, das erfordert, dass einer der Parameternamen dem Namen des Kafka-Themas entspricht oder das Argument als optionales Flag übernimmt. Hier
ist die Methode in Frage:
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)
Gerade jetzt, der Parameter records
wird als optionaler Flag aufgenommen, so dass, wenn ich das Skript ausführen, geschieht dies:
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
Wenn Sie jedoch den Argumentnamen auf shipping_label
(der Name des Kafka-Themas) ändern, wird das Skript ordnungsgemäß ausgeführt. Wie kann ich den Namen eines Parameters programmgesteuert festlegen?
Kann ich schlage vor, Sie definieren diejenigen 'vor der Zeit lambda's (möglicherweise private Methoden), so dass die Filterung nicht eine einzige„Linie“ist, die 9 muss über lesbar sein überspannt. –
Nein, warum sollte das besser lesbar sein? –
Ist das ein Beispiel oder die eigentliche Funktion? Ich nahm an, dass das tatsächliche komplizierter war und die mehreren Filterungen darin eingebettet wurden, aber wenn das die gesamte Methode ist, dann vergiss es. –