직렬화의 목록을 객체를 인스턴스는 중첩에 객체를 인스턴스 python

0

질문

나는 응용 프로그램을 만드는 것을 허용하거나 로그인하거나 사랑합니다. 레스토랑으로 소유자,추가/제거할 수 있습/편집 냉장고 등이 마련되어 있습니다. 나의 최종 목표는데 목록의 레스토랑이 내가 쓰 JSON 파일,그리고 언제나 내가 다시 사용할 수 있는 데이터 및 시뮬레이션"인자"편집 냉장 선택한 레스토랑입니다.

저는 기본적으로 이것을 원하는:

data = {
    restaurants: [
        {
            restaurant: {
            name: "Peppy",
            pw: "123",
            fridges: [
                {
                    fridge: {
                        owner: restaurant.name,
                        contents: []
                    }
                }
            ]
        }
        }
    ]
}

나는 다음과 같은 두 개의 클래스(보여주는 관련 방법):


class Restaurant:
    def __init__(self, owner, password):
        self.__password = password
        self.owner = owner
        self.__owned_fridges = [] # list of owned fridges

    def add_fridge(self):
        nickname = input("What would you like to name the fridge: ")
        self.__owned_fridges.append(fr(self.owner, nickname))
        print("Fridge added!")
 

class Fridge:
    def __init__(self, owner, nickname):
        self.nickname = nickname
        self.owner = owner
        self.__authorized_users = [owner]
        self.__contents = []

    def add_to_fridge(self):
        if len(self.__contents) == 5:
            print("Your fridge is full!")
        else:
            item = input("What would you like to add : ")
            self.__contents.append(item)

나의 문제이에서 직렬화에 대해 이 JSON. 내가 찾는 다음과 같은 작품을 직렬화 레스토랑체 JSON 지만,중첩된 냉장고 개체:

data = {
    'restaurants': []
}

# Testing code
test = res("Jac", "350b534")
test.add_fridge()
test.add_fridge()
data['restaurants'].append(json.dumps(test.__dict__))

저는 상대적으로 새로운 python,에서 온 js 배경,그래서 나는 아직 익숙한 구문입니다. 나의 질문은 어떻게 직렬화하 내부의 목록 냉장고?

json oop python
2021-11-24 03:41:22
1

최고의 응답

0

첫째,좋을 것을 확인하 dataclasses 으로 그들을 단순화 작업과 함께 작업의 클래스에서는 Python. 와 dataclasses,당신은 필요가 없을 정의하 dunder 과 같은 방법 __init____repr__ 그들은 자동으로 생성됩니다.

에 대한 특정 사용하는 경우,당신은 당신이 문제를 해결할 수 있으로 직렬화 중첩된 클래스 모델을 dict /JSON 문자열을 사용하여 선택 default 호출할 수 있는 전달하기 json.dumps. 예를 들어,당신은 통과할 수 있는 람다(본질적으로 간단 기능을)등 lambda o: o.__dict__는 검색 __dict__ 특성에 대한 개체하지 않은 본질적으로 직렬화하 JSON,아래와 같습니다.

from __future__ import annotations

import json
from dataclasses import dataclass


@dataclass
class A:
    my_string: str
    b: list[B]


@dataclass
class B:
    my_int: int
    password: str


a = A('test', [B(2, '123'), B(5, '321')])
print(a)
# A(my_string='test', b=[B(my_int=2, password='123'), B(my_int=5, password='321')])

print(json.dumps(a, default=lambda o: o.__dict__))
# {"my_string": "test", "b": [{"my_int": 2, "password": "123"}, {"my_int": 5, "password": "321"}]}

그러나 참고 dataclasses 또한 제공합니다 도우미 기능 asdict 필요하신 경우에는 변환 dataclass 인스턴스 dict 첫 번째 인스턴스.


하지만,당신은 좀 더 진보된 케이스를 사용하여 예를 들어,de-직렬화 JSON 데이터를 중첩된 클래스 모델,매핑 dataclass 과 같은 분야 password 다른 JSON 키 등 pw 로에서 나와 예를-난 확인을 제안 밖으로 직렬화 라이브러리와 같은 dataclass-마법사를잘 작동이 중첩된 dataclass 모델합니다.

2021-11-24 05:02:30

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................