J'ai une fonction de classe qui doit « passer à travers » un argument de mot clé:arguments de mot-clé Passthrough
def createOrOpenTable(self, tableName, schema, asType=Table):
if self.tableExists(tableName):
return self.openTable(tableName, asType=asType)
else:
return self.createTable(self, tableName, schema, asType=asType)
Quand je l'appelle, je reçois une erreur comme ceci:
TypeError: createTable() got multiple values for keyword argument 'asType'
Existe-t-il un moyen de "passer à travers" un tel argument mot-clé?
J'ai pensé à plusieurs réponses, mais aucune d'elles n'est optimale. De pire au meilleur:
je pouvais changer le nom du mot clé sur un ou plusieurs des fonctions, mais je veux utiliser le même mot-clé pour les trois fonctions, car le paramètre a le même sens.
je pourrais passer le paramètre
asType
par la position plutôt que par mot-clé, mais si j'ajouter d'autres paramètres de mots clés àopenTable
oucreateTable
, je dois vous rappeler de changer les appels. Je préfère l'adapter automatiquement, comme si je pouvais utiliser le mot-clé. Je pourrais utiliser le formulaire**args
à la place, pour obtenir un dictionnaire de paramètres de mot-clé plutôt que d'utiliser un paramètre par défaut, mais cela semble être l'utilisation d'un sledgehammer pour écraser une mouche (à cause des lignes de code supplémentaires nécessaires pour bien analyse-le).
Y a-t-il une meilleure solution?
D'oh Comme! –
Même si Python est, dans l'ensemble, assez sympa quand vous les frappez pour la première fois. L'autre que vous frapperez si vous n'avez pas encore défini une méthode sans argument 'self' ... Votre programme mourra avec une erreur incroyablement utile "nombre incorrect d'arguments". –
Oui, je l'ai frappé très tôt. Heureusement, j'ai vite compris. –