1515 Stimmen

Gibt es eine eingebaute Funktion, die alle aktuellen Eigenschaften und Werte eines Objekts ausgibt?

Was ich hier also suche, ist so etwas wie PHPs drucken_r Funktion.

So kann ich meine Skripte debuggen, indem ich den Zustand des betreffenden Objekts sehe.

14voto

Adam Cath Punkte 257

Wenn Sie dies zum Debuggen verwenden und einfach nur einen rekursiven Speicherauszug von allem haben wollen, ist die akzeptierte Antwort unbefriedigend, da sie voraussetzt, dass Ihre Klassen über gute __str__ Implementierungen bereits. Wenn das nicht der Fall ist, funktioniert dies viel besser:

import json
print(json.dumps(YOUR_OBJECT, 
                 default=lambda obj: vars(obj),
                 indent=1))

11voto

Symon Punkte 1418

Versuchen Sie ppretty

from ppretty import ppretty

class A(object):
    s = 5

    def __init__(self):
        self._p = 8

    @property
    def foo(self):
        return range(10)

print ppretty(A(), show_protected=True, show_static=True, show_properties=True)

Ausgabe:

__main__.A(_p = 8, foo = [0, 1, ..., 8, 9], s = 5)

9voto

wisbucky Punkte 26902

Dies gibt alle Objektinhalte rekursiv im json oder yaml eingerückten Format aus:

import jsonpickle # pip install jsonpickle
import json
import yaml # pip install pyyaml

serialized = jsonpickle.encode(obj, max_depth=2) # max_depth is optional
print json.dumps(json.loads(serialized), indent=4)
print yaml.dump(yaml.load(serialized), indent=4)

9voto

jfs Punkte 370717

Ein Beispiel für Metaprogrammierung Objekt mit Magie entleeren :

$ cat dump.py

#!/usr/bin/python
import sys
if len(sys.argv) > 2:
    module, metaklass  = sys.argv[1:3]
    m = __import__(module, globals(), locals(), [metaklass])
    __metaclass__ = getattr(m, metaklass)

class Data:
    def __init__(self):
        self.num = 38
        self.lst = ['a','b','c']
        self.str = 'spam'
    dumps   = lambda self: repr(self)
    __str__ = lambda self: self.dumps()

data = Data()
print data

Ohne Argumente:

$ python dump.py

<__main__.Data instance at 0x00A052D8>

Mit Gnosis Utils :

$ python dump.py gnosis.magic MetaXMLPickler

<?xml version="1.0"?>
<!DOCTYPE PyObject SYSTEM "PyObjects.dtd">
<PyObject module="__main__" class="Data" id="11038416">
<attr name="lst" type="list" id="11196136" >
  <item type="string" value="a" />
  <item type="string" value="b" />
  <item type="string" value="c" />
</attr>
<attr name="num" type="numeric" value="38" />
<attr name="str" type="string" value="spam" />
</PyObject>

Sie ist etwas veraltet, funktioniert aber noch.

7voto

32ndghost Punkte 51
from pprint import pprint

def print_r(the_object):
    print ("CLASS: ", the_object.__class__.__name__, " (BASE CLASS: ", the_object.__class__.__bases__,")")
    pprint(vars(the_object))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X