2010-01-29 1 views
16

In Python Django wie drucken Sie die Inrospektion eines Objekts aus? Die Liste aller öffentlichen Methoden dieses Objekts (Variable und/oder Funktionen)?In Python Django wie drucken Sie die Introspektion eines Objekts aus? Die Liste aller öffentlichen Methoden dieses Objekts (Variable und/oder Funktionen)?

z.B .:

 
def Factotum(models.Model): 
    id_ref = models.IntegerField() 

    def calculateSeniorityFactor(): 
    return (1000 - id_ref) * 1000 

Ich möchte eine Befehlszeile in der Django-Shell in der Lage sein zu laufen mir eines Django-Modell alle öffentlichen Methoden zu erzählen. Die Ausgabe von oben läuft wäre:

 
>> introspect Factotoum 
--> Variable: id_ref 
--> Methods: calculateSeniorityFactor 

Antwort

37

Nun, Dinge, die Sie in sich schauen können, sind viele, nicht nur eine.

Gute Dinge mit zu beginnen sind:

>>> help(object) 
>>> dir(object) 
>>> object.__dict__ 

Werfen Sie auch einen Blick auf das inspizieren Modul in der Standardbibliothek.

Das sollte 99% aller Basen zu Ihnen gehören.

+0

In Python gibt es kein "Introspect" -Modul. –

+0

Richtig du bist. Fest. –

6

Verwendung inspect:

import inspect 
def introspect(something): 
    methods = inspect.getmembers(something, inspect.ismethod) 
    others = inspect.getmembers(something, lambda x: not inspect.ismethod(x)) 
    print 'Variable:', # ?! what a WEIRD heading you want -- ah well, w/ever 
    for name, _ in others: print name, 
    print 
    print 'Methods:', 
    for name, _ in methods: print name, 
    print 

Es gibt keine Möglichkeit, dies ohne Klammern in einem normalen Python-Shell aufrufen können, müssen Sie introspect(Factotum) verwenden ((mit Klasse Factotum Eigenschaft im aktuellen Namensraum natürlich importiert)) und nichtintrospect Factotum mit einem Leerzeichen. Wenn Sie das schrecklich ärgert, sollten Sie sich die IPython ansehen.

Verwandte Themen