Bei der Arbeit musste ich alle Methodenargumente auflisten, die zu einem Python-Modul gehören, also habe ich es nachgeschlagen. Ich denke, es ist eine sehr Nischenaufgabe, aber anstelle eines Memos (^ _ ^;)
Mit dem Inspect-Modul können Sie Metainformationen zu Klassen und Modulen der obersten Ebene abrufen.
Details zum Inspektionsmodul-> https://docs.python.org/2/library/inspect.html
inspect.getmembers(object)
Gibt alle Mitglieder zurück, die zu dem als Argument angegebenen Objekt in einer Liste des Formulartupels ('Name', 'Wert') gehören.
inspect.getargspec(func)
Gibt die Argumentinformationen der Funktion zurück, die dem Argument im Format Tupel zugewiesen wurde (Argumente, Variablen, Schlüsselwörter, Standardwerte). args enthält eine Liste von Argumenten.
Unten ist ein Beispiel.
Ein Beispiel ist der Python-Client von Trove, ein Openstack-DBaaS. (Ich wollte alle Argumente der I / F überprüfen, die die API ausgeben, um sie zu durchsuchen.)
troveclient.v1.client.Client Struktur mit Instanzen verschiedener Klassen in der Instanzvariablen der Klasse von Unten finden Sie den Code zum Überprüfen der Methodenargumente jeder Instanz
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
Unten finden Sie den Code zur Untersuchung der CLI-I / F. getmembers holt wirklich alle Attribute Ich habe auch die Attribute im Dekorateur deklariert.
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