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

Программы на Python
Ответить
Anonymous
 В Python, как мне привести объект класса к словарю

Сообщение Anonymous »

Предположим, у меня есть простой класс на 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}
Я очень легко могу преобразовать его в целое число

Код: Выделить всё

>>> w = Wharrgarbl('one', 'two', 'three', 6)
>>> int(w)
9006
И это здорово! Но теперь я хочу аналогичным образом преобразовать его в словарь

Код: Выделить всё

>>> w = Wharrgarbl('one', 'two', 'three', 6)
>>> dict(w)
{'a': 'one', 'c': 'three', 'b': 'two'}
Что мне нужно определить, чтобы это работало? Я попытался заменить __dict__ и dict на __what_goes_here__, но dict(w) привел к ошибке TypeError: объект Wharrgarbl не является итерируемым в обоих случаях. Я не думаю, что простая итерация класса решит проблему. Я также попробовал много раз использовать в Google столько разных формулировок «приведение объекта в Python для диктовки», сколько мог придумать, но не смог найти ничего подходящего:{

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

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

Код: Выделить всё

>>> w.__what_goes_here__()
{'a': 'one', 'c': 'three', 'b': 'two'}
Но я предполагаю, что существует питонический способ заставить dict(w) работать, поскольку это тот же тип, что и int(w) или str(w). Если нет более питонического способа, это тоже нормально, просто решил спрошу. Ой! Я думаю, поскольку это имеет значение, это для Python 2.7, но супербонусные баллы также есть и для старого и сломанного решения 2.4.

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

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

Подробнее здесь: https://stackoverflow.com/questions/352 ... -to-a-dict
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»