Wie kann ich in Python ein Klassenobjekt in ein Diktat umwandeln?

| | | | | | |

Nehmen wir an, ich habe eine einfache Klasse in Python

class Wharrgarbl(object): def __init__(self, a, b, c, sum, version="old" ): self.a = a self.b = b self.c = c self.sum = 6 self.version = Version def __int__(self): return self.sum + 9000 def __what_goes_here__(self): return {"a" : self.a, "b": self.b, "c": self.c} 

Ich kann es sehr einfach in eine ganze Zahl umwandeln

>>> w = Whargarbl("eins", "zwei", "drei", 6) >>> int(w) 9006 

Das ist großartig! Aber jetzt möchte ich es auf ähnliche Weise in ein Diktat umwandeln

>>> w = Whargarbl("eins", "zwei", "drei", 6) >>> dict(w) {"a": "eins", "c": "drei", "b": "zwei"} 

Was muss ich definieren, damit das funktioniert ? Ich habe versucht, __what_goes_here__ durch __dict__ und dict zu ersetzen, aber dict(w) führte zu einem TypeError : Das Wharrgarbl-Objekt ist in beiden Fällen nicht iterierbar. Ich glaube nicht, dass es das Problem lösen wird, die Klasse einfach iterierbar zu machen. Ich habe auch viele Googles mit so vielen verschiedenen Formulierungen von "python cast object to dict" versucht, wie ich mir vorstellen konnte, konnte aber nichts Relevantes finden: {

Auch! Beachten Sie, dass der Aufruf von w.__dict__ nicht das tut, was ich will, weil es w.version und w.sum enthalten wird. Ich möchte die Umwandlung in dict auf die gleiche Weise anpassen, wie ich die Umwandlung in int anpassen kann, indem ich def int(self) verwende.

Ich weiß, dass ich so etwas einfach machen könnte

>>> w.__what_goes_here__() {"a": "one", "c": "three", "b": "two"} 

Aber ich gehe davon aus, dass es einen Python-Weg gibt um dict(w) zum Laufen zu bringen, da es dasselbe ist wie int(w) oder str(w). Wenn es keinen pythonischeren Weg gibt, ist das auch in Ordnung, ich dachte nur, ich würde fragen. Oh! Ich denke, da es darauf ankommt, ist dies für Python 2.7, aber auch super Bonuspunkte für eine 2.4 alte und kaputte Lösung.

Es gibt eine weitere Frage Überladen von __dict__() in der Python-Klasse das ist diesem ähnlich, kann aber unterschiedlich genug sein, um zu garantieren, dass dies kein Duplikat ist. Ich glaube, dass OP fragt, wie alle Daten in seinen Klassenobjekten als Wörterbücher umgewandelt werden sollen. Ich suche nach einem individuelleren Ansatz, in dem ich Ich möchte nicht, dass alles in __dict__ im Wörterbuch enthalten ist, das von dict() zurückgegeben wird. So etwas wie öffentliche vs. private Variablen kann ausreichen, um zu erklären, wonach ich suche. Die Objekte werden einige Werte speichern, die in Berechnungen verwendet werden, und solche, die ich nicht in den resultierenden Wörterbüchern auftauchen muss/möchte.

UPDATE: Ich habe mich für den asdict< entschieden /code> Route vorgeschlagen, aber es war eine schwierige Entscheidung, auszuwählen, was ich als Antwort auf die Frage haben wollte. Sowohl @RickTeachey als auch @jpmc26 lieferten die Antwort, mit der ich rollen werde, aber erstere hatte mehr Informationen und Optionen und landete auch auf dem gleichen Ergebnis und wurde mehr positiv bewertet, also habe ich mich dafür entschieden. Upvotes rundherum und danke für die Hilfe. Ich habe lange und hart auf Stackoverflow gelauert und versuche, meine Zehen mehr ins Wasser zu bekommen.

Wir hoffen, dass dieser Artikel Ihnen geholfen hat, das Problem zu lösen. Sehen Sie sich neben Wie kann ich in Python ein Klassenobjekt in ein Diktat umwandeln? auch andere __dict__-bezogene Themen an.

Möchten Sie sich in Python auszeichnen? Sehen Sie sich unseren Rückblick auf die besten Python-Online-Kurse 2022 an. Wenn Sie an Data Science interessiert sind, sehen Sie sich auch an, wie Sie Programmieren in R lernen.

Dieses Material ist übrigens auch in anderen Sprachen verfügbar:



Oliver Schteiner

Milan | 2022-11-29

Danke für die Erklärungen! Ich steckte mit Wie kann ich in Python ein Klassenobjekt in ein Diktat umwandeln? für einige Stunden, endlich habe ich es geschafft 🤗. Ich hoffe nur, dass das nicht mehr auftaucht

Anna Wu

Tallinn | 2022-11-29

Danke für die Erklärungen! Ich steckte mit Wie kann ich in Python ein Klassenobjekt in ein Diktat umwandeln? für einige Stunden, endlich habe ich es geschafft 🤗. Ich bin mir nur nicht ganz sicher, ob es die beste Methode ist

Oliver Richtgofen

New York | 2022-11-29

Danke für die Erklärungen! Ich steckte mit Wie kann ich in Python ein Klassenobjekt in ein Diktat umwandeln? für einige Stunden, endlich habe ich es geschafft 🤗. Ich bin mir nur nicht ganz sicher, ob es die beste Methode ist

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

Common xlabel/ylabel for matplotlib subplots

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

12 answers

NUMPYNUMPY

Flake8: Ignore specific warning for entire file

12 answers

NUMPYNUMPY

glob exclude pattern

12 answers

NUMPYNUMPY

How to avoid HTTP error 429 (Too Many Requests) python

12 answers

NUMPYNUMPY

Python CSV error: line contains NULL byte

12 answers

NUMPYNUMPY

csv.Error: iterator should return strings, not bytes

12 answers


Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

sin

How to specify multiple return types using type-hints

exp

Printing words vertically in Python

exp

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries

cos

Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically