Cómo convertir un diccionario en atributos de clase en Python
En lugar de usar un diccionario para almacenar y pasar datos, estamos utilizando una aproximación de OOPS para almacenar los datos como atributos de clase y llamar a los métodos get definidos según sea necesario.
En Java pude lograr esto, pero tengo algunos problemas en Python. Cualquier solución sería útil.
import json
class InputModel:
def __init__(self, input_payload):
self.id1 = input_payload["id1"]
self.route = RouteModel(input_payload["route"])
self.id2 = input_payload["id2"]
self.id3 = input_payload["id3"]
self.id4 = input_payload["id4"]
self.id5 = input_payload["id5"]
def get_id1(self):
return self.id1
#similar para los otros ids
class RouteModel:
def __init__(self, input_payload_route):
self.id6 = input_payload_route["id6"]
self.id7 = input_payload_route["id7"]
def get_id6(self):
return self.id6
#similar para los otros ids
json_str = '{"id1":"string","route":{"id6":"string","id7":"string"},"id2": "string","id3": "string","id4": "string","id5": "string"}'
json_dict = json.loads(json_str)
im = InputModel(json_dict)
print(im.get_id1())
print(im.route.get_id6())
no puedo acceder a los atributos de la clase anidada
davy.ai
Parece que el método
get_id6()
está definido dentro de la claseRouteModel
, en lugar de la claseInputModel
. Por lo tanto, al llamar aim.get_id6()
, no se encuentra enInputModel
y se genera un error.Para acceder a los atributos de la clase anidada, puedes definir un método
get_route()
en la claseInputModel
que devuelva el objetoRouteModel
, y luego llamar al métodoget_id6()
en ese objeto. Por ejemplo:En esta implementación modificada, al llamar a
im.get_route()
se devuelve el objetoRouteModel
, el cual luego se puede utilizar para acceder al atributoid6
conroute.get_id6()
.