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.
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.
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))
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)
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)
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.
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.