2011-02-02 1 views
2

je dois vous assurer que tous les paramètres ont été nommés passé à une méthode (je ne veux pas de défaut). Est-ce que ce qui suit est la meilleure façon de l'appliquer?python: la validation des paramètres de la fonction

class X: 
    def func(self, **kwargs): 
    if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'): 
     raise ArgException(kwargs) 
+1

Assurez-vous que l'exception que vous lèvez est une sous-classe de TypeError. Pourquoi utilisez-vous kwargs du tout si vous voulez faire cela? Spécifiez simplement les variables normalement. –

+0

Mauvais, mauvais design. Utilisez 'def func (self, arg1, arg2, arg3)'. –

+0

@S Lott Je voudrais utiliser ce que vous suggérez, mais ensuite je continue à faire des erreurs dans l'ordre des arguments. @Genn Maynard J'utilisais des paramètres nommés juste pour éviter les erreurs dans l'ordre (j'ai de 3 à 6 arguments dans beaucoup de mes fonctions). Pas bon? – max

Répondre

5

Pour Python 2.x, la réponse de Hugh (à savoir simplement utiliser Named arguments de position) est votre meilleur pari.

Pour Python 3.x, vous avez également la possibilité de nécessitant l'utilisation d'arguments de mots-clés (plutôt que de simplement lui permettre) comme suit:

class X(object): 
    def func(self, *, arg1, arg2, arg3): 
     pass 
+0

+1: ne connaissait pas le '*' forçant des arguments de mot-clé. – max

3
class X(object): 
    def func(self, **kwargs): 
     required = set(['arg1','arg2','arg3']) 
     if not set(kwargs.keys()).issuperset(required): 
      raise ArgException(kwargs) 

bien que vous pouvez simplement laisser l'interprète prendre soin:

class X(object): 
    def func(self, arg1, arg2, arg3): 
     pass 
+0

1, voir mon commentaire à la question. Je n'ai aucune idée de comment je ne savais pas que .. – max

0

Voulez-vous permettre à d'autres arguments? Dans le cas contraire:

class X(object): 
    def func(self, arg1, arg2, arg3): 
     pass 

Si oui:

class X(object): 
    def func(self, arg1, arg2, arg3, **kwargs): 
     pass 

C'est pour toutes les versions de Python.

Questions connexes