Supposons que j'ai deux classes ...Comment une fonction peut-elle prendre ** kwargs comme arguments et les distribuer entre différentes classes?
class A:
def __init__(self, *args, arg1="default1", arg2="default2"):
# Initialise class A
class B:
def __init__(self, arg3="default3", arg4="default4"):
# Initialise class B
Chaque classe a ses propres arguments de mot-clé, et on a des arguments de position.
Supposons maintenant il y a une fonction qui crée une instance de chacune de ces classes, en utilisant ses propres arguments pour le faire:
def make_objs(*args, arg1="default1", arg2="default2", arg3="default3", arg4="default4"):
objA = ClassA(*args, arg1=arg1, arg2=arg2)
objB = ClassB(arg3=arg3, arg4=arg4)
Ici, j'allouer manuellement les arguments de mots-clés que la fonction reçue à la classe correcte . C'est un peu fastidieux cependant - je dois dupliquer les mots-clés dans la définition de la fonction, et changer les classes signifiera changer les arguments de la fonction.
Idéalement, je ferais quelque chose comme ceci:
def make_objs(*args, **kwargs):
objA = ClassA(*args, **kwargs)
objB = ClassB(**kwargs)
où chaque classe prendrait tous les arguments-clés et extraire uniquement ceux qui sont pertinents pour elle. Ce n'est pas ce que ferait le code ci-dessus bien sûr, il va lancer une exception car ClassA
ne s'attend pas à un argument appelé arg3
.
Y a-t-il un moyen de le faire? Une certaine façon de faire la fonction prend **kwargs
comme argument et détermine quels arguments peuvent aller à quelle classe?
Que diriez-vous des arguments '' constructor' dans la classe A' vous ajoutez 'et' * arg' ** kwarg' après 'arg1' et' arg2'? Il en va de même pour la «classe B». –
Question: Quand allez-vous déballer '* args' dans' classA'? Pouvez-vous s'il vous plaît fournir la définition complète de votre 'constructor' pour' classA'? –
La fonction est actuellement: https://github.com/samirelanduk/quickplots/blob/2.0/quickplots/quick.py#L4 –