Si j'essaie de surcharger une fonction Python intégrée pour que le second argument puisse être long ou Objet, existe-t-il un moyen standard de le faire? Est-ce ceci?Surcharge des fonctions Python intégrées à l'aide de PyArg_ParseTuple
Ce que je suis en train maintenant (noms changés pour protéger les innocents):
bool UseLongVar2 = true;
if (!PyArg_ParseTuple(args, "ll:foo", &LongVar1, &LongVar2))
{
PyErr_Clear();
if (!PyArg_ParseTuple(args, "lO&:foo", &LongVar1, convertObject, &Object))
{
UseLongVar2 = false;
return NULL;
}
}
En quoi cela diffère-t-il de ce que je fais ici? Après le code d'exemple je peux dire quelque chose le long de la ligne de "résultat = UseLongVar2? FooLong (LongVar1, LongVar2): fooObj (LongVar1, Object)"? – patros
Juste pour clarifier: Je suis intéressé par la façon de dire quels types d'arguments ont été transmis à partir de Python. Y a-t-il quelque chose de mieux que PyArg_ParseTuple, ou existe-t-il un raccourci plus propre pour séparer les différents types de variables? La construction que j'utilise serait complètement hideuse même pour quelques arguments qui pourraient avoir 2 ou 3 types possibles. – patros
Ceci est différent parce que, à votre façon, vous faites deux tests. D'abord le test pour voir s'il a réussi, et ensuite vous devrez tester les indicateurs que vous avez définis pour voir quels arguments analyser. Avec la façon dont je l'ai décrit, vous ne faites qu'un test. Et non, je ne pense pas qu'il y ait une façon plus propre de vérifier les args que vous avez. Une autre bonne raison de garder les arguments dans les extensions C simples. –