Jak w Pythonie rzutować obiekt klasy na dykt?

| | | | | | |

Powiedzmy, że mam prostą klasę w Pythonie

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 = wersja def __int__(self): return self.sum + 9000 def __what_goes_here__(self): return {"a" : self.a, "b": self.b, "c": self.c} 

Mogę bardzo łatwo rzutować na liczbę całkowitą

>>> w = Wharrgarbl("jeden", "dwa", "trzy", 6) >>> int(w) 9006 

Co jest świetne! Ale teraz chcę w podobny sposób wrzucić go na dykt.

>>> w = Wharrgarbl("jeden", "dwa", "trzy", 6) >>> dict(w) {"a": "jeden", "c": "trzy", "b": "dwa"} 

Co muszę zdefiniować, aby to zadziałało ? Próbowałem zamienić __dict__ i dict na __what_goes_here__, ale dict(w) spowodowało TypeError : Obiekt Wharrgarbl nie jest iterowalny w obu przypadkach. Nie sądzę, że samo iterowalność klasy rozwiąże problem. Próbowałem również wielu wyszukiwań Google z tyloma różnymi sformułowaniami „obszar rzucany w Pythonie do dyktowania”, ile tylko mogłem wymyślić, ale nie mogłem znaleźć niczego odpowiedniego :{

Również! Zauważ, że wywołanie w.__dict__ nie zrobi tego, czego chcę, ponieważ będzie zawierać w.version i w.sum. Chcę dostosować rzutowanie do dict w taki sam sposób, w jaki mogę dostosować rzutowanie do int za pomocą def int(self).

Wiem, że mógłbym po prostu zrobić coś takiego

>>> w.__what_goes_here__() {"a": "jeden", "c": "trzy", "b": "dwa"} 

Ale zakładam, że istnieje sposób w Pythonie aby dict(w) działał, ponieważ jest to ten sam typ rzeczy co int(w) lub str(w). Jeśli nie ma bardziej pytonowego sposobu, to też jest w porządku, po prostu pomyślałem, że zapytam. Och! Myślę, że skoro ma to znaczenie, dotyczy to Pythona 2.7, ale super punkty bonusowe również za stare i zepsute rozwiązanie 2.4.

Jest jeszcze jedno pytanie Przeciążanie __dict__() w klasie Pythona który jest podobny do tego, ale może być wystarczająco inny, aby zagwarantować, że nie jest to duplikat.Uważam, że OP pyta, jak rzucić wszystkie dane w swoich obiektach klasy jako słowniki.Szukam bardziej spersonalizowanego podejścia w tym nie chcę, aby wszystko w __dict__ było zawarte w słowniku zwróconym przez dict(). Coś w rodzaju zmiennych publicznych i prywatnych może wystarczyć do wyjaśnienia, czego szukam. Obiekty będą przechowywać niektóre wartości używane w obliczeniach i takie, że nie muszę/chcę pojawiać się w wynikowych słownikach.

AKTUALIZACJA: Zdecydowałem się na asdict trasa sugerowała, ale wybór tego, co chciałem być odpowiedzią na pytanie, był trudnym wyborem. Zarówno @RickTeachey, jak i @jpmc26 dostarczyli odpowiedź, z którą zamierzam się toczyć, ale ten pierwszy miał więcej informacji i opcji, wylądował na tym samym wyniku i został bardziej przegłosowany, więc poszedłem z tym. pomocy. Długo i ciężko czaiłem się na stackoverflow i staram się bardziej zanurzyć palce u stóp w wodzie.

Mamy nadzieję, że ten artykuł pomógł Ci rozwiązać problem. Oprócz Jak w Pythonie rzutować obiekt klasy na dykt? sprawdź inne tematy związane z __dict__.

Chcesz się wyróżniać w Pythonie? Zobacz naszą recenzję najlepszych kursów online Pythona 2022. Jeśli interesujesz się Data Science, sprawdź także, jak nauczyć się programowania w R.

Nawiasem mówiąc, ten materiał jest również dostępny w innych językach:



Manuel Galleotti

San Francisco | 2022-11-29

Może są jakieś inne odpowiedzi? Co Jak w Pythonie rzutować obiekt klasy na dykt? dokładnie oznacza?. Sprawdzane wczoraj, działa!

Julia Williams

Shanghai | 2022-11-29

Prosto i przejrzyście. Dziękuję za podzielenie się. Jak w Pythonie rzutować obiekt klasy na dykt? i inne sprawy z StackOverflow zawsze były moim słabym punktem 😁.. Po prostu nie jestem pewien, czy to najlepsza metoda

Angelo Jackson

Paris | 2022-11-29

Przygotowywałem się do mojej rozmowy o kodowaniu, dzięki za wyjaśnienie tego - Jak w Pythonie rzutować obiekt klasy na dykt? w Pythonie nie jest najprostszy. Mam tylko nadzieję, że już się nie pojawi

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

News


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