В python, как мне привести объект класса к dict

| | | | | | |

Допустим, у меня есть простой класс в 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 = версия def __int__(self): return self.sum + 9000 def __what_goes_here__(self): return {"a" : self.a, "b": self.b, "c": self.c} 

Я могу очень легко привести его к целому числу

>>> w = Wharrgarbl("один", "два", "три", 6) >>> int(w) 9006 

Отлично! Но теперь я хочу передать его в диктовку аналогичным образом

>>> w = Wharrgarbl("один", "два", "три", 6) >>> dict(w) {"a": "один", "c": "три", "b": "два"} 

Что мне нужно определить, чтобы это работало ? Я попытался заменить __dict__ и dict на __what_goes_here__, но dict(w) привел к TypeError : объект Wharrgarbl не является итерируемым в обоих случаях. Я не думаю, что простое создание итерируемого класса решит проблему. Я также пытался использовать множество Google с таким количеством различных формулировок «объект python cast to dict», как я мог придумать, но не смог найти ничего подходящего: {

Также! Обратите внимание, что вызов w.__dict__ не будет делать то, что я хочу, потому что он будет содержать w.version и w.sum. Я хочу настроить приведение к dict таким же образом, как я могу настроить приведение к int с помощью def int(self).

Я знаю, что мог бы сделать что-то подобное

>>> w.__what_goes_here__() {"a": "один", "c": "три", "b": "два"} 

Но я предполагаю, что есть питонический способ чтобы dict(w) работал, поскольку это тот же тип, что и int(w) или str(w). Если нет более питонического способа, это тоже хорошо, просто подумал, что я спрошу. О! Я думаю, поскольку это имеет значение, это для Python 2.7, но также супер бонусные баллы за старое и сломанное решение 2.4.

Есть еще один вопрос Перегрузка __dict__() в классе python который похож на этот, но может достаточно отличаться, чтобы гарантировать, что это не дубликат. Я считаю, что OP спрашивает, как преобразовать все данные в его объектах класса в словари. Я ищу более индивидуальный подход в том, что я не хочу, чтобы все в __dict__ включалось в словарь, возвращаемый dict(). Что-то вроде общедоступных и частных переменных может быть достаточным, чтобы объяснить, что я ищу. Объекты будут хранить некоторые значения, используемые в вычислениях, и такие, которые мне не нужно/не хочется отображать в результирующих словарях.

ОБНОВЛЕНИЕ: я решил использовать asdict< Маршрут /code> был предложен, но это был трудный выбор, чтобы выбрать то, что я хотел бы быть ответом на вопрос. И @RickTeachey, и @jpmc26 предоставили ответ, с которым я собираюсь согласиться, но у первого было больше информации и вариантов, и он также получил тот же результат, и за него проголосовали больше, поэтому я согласился. помогите. Я долго и упорно скрывался в stackoverflow и пытаюсь больше погрузиться в воду.

Мы надеемся, что эта статья помогла вам решить проблему. Помимо В python, как мне привести объект класса к dict, проверьте другие темы, связанные с __dict__.

Хотите преуспеть в Python? Посмотрите наш обзор лучших онлайн-курсов Python 2022. Если вас интересует наука о данных, узнайте также, как изучить программирование на R.

Кстати, этот материал доступен и на других языках:



Boris Galleotti

Prague | 2022-11-29

StackOverflow всегда немного напрягает 😭 В python, как мне привести объект класса к dict это не единственная проблема, с которой я столкнулся. Вернусь завтра с обратной связью

Davies Porretti

Prague | 2022-11-29

Спасибо за объяснение! Я застрял с В python, как мне привести объект класса к dict несколько часов, наконец-то получилось 🤗. Вчера проверил, работает!

Angelo Krasiko

Berlin | 2022-11-29

Спасибо за объяснение! Я застрял с В python, как мне привести объект класса к dict несколько часов, наконец-то получилось 🤗. Вернусь завтра с обратной связью

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