Python Language Utiliser * args lors de l'appel de fonctions


Exemple

Un cas d'utilisation courant pour *args dans une définition de fonction consiste à déléguer le traitement à une fonction encapsulée ou héritée. Un exemple typique pourrait être la méthode __init__ une classe

class A(object):
    def __init__(self, b, c):
        self.y = b
        self.z = c

class B(A):
    def __init__(self, a, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)
        self.x = a

Ici, le a paramètre est traité par la classe enfant après que tous les autres arguments (position et mot - clé) sont passés sur - et traitées par - la classe de base.

Par exemple:

b = B(1, 2, 3)
b.x  # 1
b.y  # 2
b.z  # 3

Ce qui se passe ici, c'est que la fonction __init__ la classe B voit les arguments 1, 2, 3 . Il sait qu'il doit prendre un argument positionnel ( a ), donc il saisit le premier argument passé dans ( 1 ), donc dans le cadre de la fonction a == 1 .

Ensuite, il voit qu'il doit prendre un nombre arbitraire d'arguments positionnels ( *args ), il prend donc le reste des arguments positionnels passés dans ( 1, 2 ) et les place dans *args . Maintenant (dans le cadre de la fonction) args == [2, 3] .

Ensuite, il appelle la fonction __init__ classe A avec *args . Python voit le * devant args et "décompresse" la liste en arguments. Dans cet exemple, lorsque la classe B 's __init__ fonction appelle la classe A ' s __init__ fonction, il sera transmis les arguments 2, 3 (c. -à- A(2, 3) ).

Enfin, il définit sa propre propriété x sur le premier argument positionnel a , qui est égal à 1 .