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.

3voto

Anyany Pan Punkte 559

Versuchen Sie es einfach Beprint .

Es hilft Ihnen nicht nur beim Drucken von Objektvariablen, sondern auch bei einer schönen Ausgabe, wie dieser hier:

class(NormalClassNewStyle):
  dicts: {
  },
  lists: [],
  static_props: 1,
  tupl: (1, 2)

3voto

Allohvk Punkte 444

Es gibt zwar viele gute Antworten, aber hier ist ein Einzeiler, der die Attribute sowie die Werte angeben kann:

(str(vars(config)).split(",")[1:])

wobei 'config' das betreffende Objekt ist. Ich führe dies als separate Antwort auf, weil ich einfach nur die relevanten Werte des Objekts (ohne __main usw.) ausgeben wollte, ohne Schleifen oder pretty print zu verwenden, und keine passende Antwort gefunden habe.

2voto

yrnr Punkte 61

Vars() scheint die Attribute dieses Objekts anzuzeigen, aber dir() scheint auch die Attribute der übergeordneten Klasse(n) anzuzeigen. Normalerweise braucht man keine geerbten Attribute zu sehen wie str , doc . Diktat etc.

In [1]: class Aaa():
...:     def __init__(self, name, age):
...:         self.name = name
...:         self.age = age
...:
In [2]: class Bbb(Aaa):
...:     def __init__(self, name, age, job):
...:         super().__init__(name, age)
...:         self.job = job
...:
In [3]: a = Aaa('Pullayya',42)

In [4]: b = Bbb('Yellayya',41,'Cop')

In [5]: vars(a)
Out[5]: {'name': 'Pullayya', 'age': 42}

In [6]: vars(b)
Out[6]: {'name': 'Yellayya', 'age': 41, 'job': 'Cop'}

In [7]: dir(a)
Out[7]:
['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 ...
 ...
 '__subclasshook__',
 '__weakref__',
 'age',
 'name']

2voto

shahjapan Punkte 12481

pprint enthält einen "hübschen Drucker" zur Erzeugung ästhetisch ansprechender Darstellungen Ihrer Datenstrukturen. Der Formatierer erzeugt Darstellungen von Datenstrukturen, die vom Interpreter korrekt geparst werden können und auch für einen Menschen leicht zu lesen sind. Die Ausgabe erfolgt nach Möglichkeit in einer einzigen Zeile, bei Aufteilung auf mehrere Zeilen wird sie eingerückt.

2voto

Robert Hönig Punkte 575

Für alle, die sich mit

  • vars() nicht alle Attribute zurückgeben.
  • dir() nicht die Werte der Attribute zurückgeben.

Der folgende Code druckt todo Eigenschaften von obj mit ihren Werten:

for attr in dir(obj):
        try:
            print("obj.{} = {}".format(attr, getattr(obj, attr)))
        except AttributeError:
            print("obj.{} = ?".format(attr))

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