Au travail, j'avais besoin de lister tous les arguments de méthode appartenant à un module Python, alors je l'ai recherché. Je pense que c'est une tâche très spécifique, mais au lieu d'un mémo (^ _ ^;)
Recherchez dans les méta-informations des classes et des modules de niveau supérieur avec le module inspect.
Détails du module inspect-> https://docs.python.org/2/library/inspect.html
inspect.getmembers(object)
Renvoie tous les membres appartenant à l'objet donné en argument dans une liste de la forme tuple ('nom', 'valeur').
inspect.getargspec(func)
Renvoie les informations d'argument de la fonction donnée à l'argument au format tuple (args, varargs, mots-clés, valeurs par défaut). args contient une liste d'arguments.
Voici un exemple.
Un exemple est le client python de Trove, qui est un DBaaS openstack. (Je voulais vérifier tous les arguments de l'I / F qui émet l'API à trove.)
troveclient.v1.client.Client Structure qui a des instances de différentes classes dans la variable d'instance de la classe de Voici le code pour vérifier les arguments de méthode que chaque instance a
import inspect
import troveclient.v1.client as dbcli
cli = dbcli.Client('', '', '')
cli_info = inspect.getmembers(cli)
for rds_info in cli_info:
if rds_info[0][0] != "_":
# Above if statement is for removing private class
for info in inspect.getmembers(rds_info[1]):
if inspect.ismethod(info[1]):
if info[0][0] != "_":
# Above "if" statement is for removing private method
for arg in inspect.getargspec(info[1]).args:
print rds_info[0], info[0], arg
Vous trouverez ci-dessous le code pour enquêter sur l'interface CLI I / F getmembers récupère vraiment tous les attributs J'ai également obtenu les attributs déclarés dans le décorateur.
import inspect
import troveclient.v1.shell as rdscli
for i in inspect.getmembers(rdscli):
if inspect.isfunction(i[1]):
for j in inspect.getmembers(i[1]):
if j[0] == 'arguments':
# Above if statement is for retrieving decorators attribute.
for k in j[1]:
required = 'y'
default = 'None'
helpstr = k[1].get('help')
if 'default' in k[1].keys():
required = 'n'
default = k[1].get('default')
if default is None:
default = 'None'
if helpstr is None:
helpstr = 'None'
if isinstance(default, list):
default = "[" + ",".join(default) + "]"
print(i[0] + "|" + k[0][0] + "|" + required +
"|" + default + "|" + helpstr)
Recommended Posts