Код: Выделить всё
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'}
А еще! Обратите внимание, что вызов w.__dict__ не даст того, что я хочу, поскольку он будет содержать w.version и w.sum. Я хочу настроить приведение к dict так же, как я могу настроить приведение к int с помощью def int(self).
Я знаю, что мог бы сделать что-то подобное
Код: Выделить всё
>>> w.__what_goes_here__()
{'a': 'one', 'c': 'three', 'b': 'two'}
Есть еще один вопрос. Перегрузка __dict__() на класс Python, который похож на этот, но может достаточно отличаться, чтобы гарантировать, что он не является дубликатом. Я считаю, что ОП спрашивает, как преобразовать все данные в объекты своего класса в словари. Мне нужен более индивидуальный подход: я не хочу, чтобы все, что есть в __dict__, включалось в словарь, возвращаемый функцией dict(). Что-то вроде общедоступных и частных переменных может быть достаточным, чтобы объяснить, что я ищу. Объекты будут хранить некоторые значения, используемые в вычислениях, и такие, которые мне не нужны/не хочется отображать в результирующих словарях.
ОБНОВЛЕНИЕ:
Я Я решил пойти по предложенному маршруту asdict, но это был трудный выбор, выбирая то, что я хотел бы быть ответом на вопрос. И @RickTeachey, и @jpmc26 предоставили ответ, который я собираюсь использовать, но у первого было больше информации и опций, и он также получил тот же результат, и за него проголосовали больше, поэтому я согласился с ним. Хотя все вокруг поддерживают и спасибо за помощь. Я долго и усердно скрывался за stackoverflow и пытаюсь больше погружаться в воду.
Подробнее здесь: https://stackoverflow.com/questions/352 ... -to-a-dict
Мобильная версия