Schleife über ein Python / IronPython-Objekt-Methoden
Was ist der richtige Weg, um eine Schleife über ein Python-Objekt die Methoden und anrufen?
Gegeben das Objekt:
class SomeTest():
def something1(self):
print "something 1"
def something2(self):
print "something 2"
- Warum bist du nicht mit dem unittest-Modul, welches das für Sie übernimmt?
- versuchen zu lernen, über Python Introspektion/Reflexion keine Unit-Tests. Obwohl ich weiß, das ist, was es sieht aus wie ich bin versucht zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die inspect-Modul zu bekommen-Klasse (oder Instanz) Mitglieder:
getmembers() liefert eine Liste von Tupeln, wobei jedes Tupel ist (name, Mitglied). Das zweite argument getmembers() ist das Prädikat,, welche Filter die Rückkehr-Liste (in diesem Fall der Rückkehr einzige Methode, Objekte)
Methoden vs. Funktionen und andere Arten von callables...
(Um das Problem in den Kommentaren in Unbekannte post.)
Ersten, es sollte angemerkt werden, dass, zusätzlich zu Benutzer-definierten Methoden, gibt es eingebaute Methoden, und ein built-in-Methode ist, wie der doc an http://docs.python.org/reference/datamodel.html sagt, "wirklich eine andere Verkleidung eines built-in-Funktion" (das ist ein wrapper um eine C-Funktion.)
Benutzer-definierten Methoden, als Unbekannt ist, zitiert, zitieren, der sagt:
Aber dies bedeutet nicht, dass "alles, was definiert
__call__
befestigt wird, um ein Objekt eine Methode." Eine Methode ist aufrufbar, aber ein callable ist nicht unbedingt eine Methode. Benutzer-definierten Methoden sind Wrapper, was das Zitat sagt.Hoffentlich diese Ausgabe (von Python 2.5.2, die ich griffbereit haben) zeigt die Unterscheidung:
Und - Bearbeitung fügen Sie die folgende zusätzliche Leistung, die Sie auch relevant sind...
Ich nicht hinzufügen, mehr Leistung, man kann aber auch eine Klasse ein Attribut einer anderen Klasse oder einer Instanz vor, und obwohl die Klassen aufrufbar sind, die Sie nicht bekommen würde eine Methode. - Methoden implementiert, mit non-data descriptors, also look-up-Deskriptoren, wenn Sie wollen mehr Informationen darüber, wie Sie arbeiten.
Diesem code-snippet wird rufen etwas wird es finden in
obj
und speichern die Ergebnisse in der Zuordnung, wo der Schlüssel ist das Attribut name —dict((k, v()) for (k, v) in obj.__dict__.iteritems() if k.startswith('something'))
Bearbeiten
Daniel, Sie sind falsch.
http://docs.python.org/reference/datamodel.html
Daher etwas definiert, dass __call__ und angeschlossen ist, um ein Objekt eine Methode.
Antwort
Den richtigen Weg, um zu sehen, welche Elemente ein Objekt hat, ist, die dir () - Funktion.
Offensichtlich dieses Beispiel funktioniert nur für Funktionen, die keine Argumente.