Возвращать нужный словарь при обращении к классу

Есть класс с ответом запроса, как можно сделать так что бы при обращении брался сразу и возвращался self.resp, по типу d['test'] а не d.resp['test']? Я пытался поменять метод get но ничего не вышло(

class RequestResponse:
    def __init__(self, resp, error=None):
        self.resp = resp
        self.error = error

    def __get__(self):
        return self.resp

d = RequestResponse({"test": 1, "test2": 3})

print(d) # {"test": 1, "test2": 3}
print(d['test']) # 1

Ответы (2 шт):

Автор решения: Сергей Кох

Я не понял, вы хотите приравнять объект d к словарю d.resp? Вот что-то такое возможно:

class RequestResponse:
    def __init__(self, resp, error=None):
        self.resp = resp
        self.test, self.test2 = resp.values()
        self.error = error

    @staticmethod
    def dict(resp):
        return resp


d = RequestResponse({"test": 1, "test2": 3})
print(d.resp)
print(d.test, d.test2)
c = RequestResponse.dict({"test": 1, "test2": 3})
print(c)
print(c['test'])

{'test': 1, 'test2': 3}
1 3
{'test': 1, 'test2': 3}
1
→ Ссылка
Автор решения: Evrik

Если Вы хотите, чтобы Ваш класс мог возвращать значения при обращении к нему по индексу, то нужно перегружать метод getitem

class RequestResponse:
    def __init__(self, resp, error=None):
        self.resp = resp
        self.error = error

    def __getitem__(self, key):
        return self.resp[key]

d = RequestResponse({"test": 1, "test2": 3})

print(d) # {"test": 1, "test2": 3}
print(d['test']) # 1
→ Ссылка