Serializing รายชื่อของวัตถุโหรอบการภายในเป็นวัตถุกตัวอย่างเป็นภาษาไพธอน

0

คำถาม

ฉันกำลังทำโปรแกรจะอนุญาตให้คุณเหมือนกัปูมบันทึกในหรือสร้างร้านอาหาร เป็นเจ้าของร้านอาหารคุณสามารถเพิ่ม/ลบ/แก้ไข refrigerators. ฉันเป้าหมายสุดท้ายนั่นฉันต้องการรายชื่อของร้านอาหารว่าฉันจะเขียน LANGUAGE แฟ้มและกินเมื่อไหร่ก็ได้ตอนที่ฉั rerun แอพฯ,ฉันสามารถดึงข้อมูลเข้าและเลียนแบ"การเป็นเจ้าของร้านอาหาร"และแก้ไข fridges สำหรับเลือกร้านอาหาร

ฉันพื้นฐานแล้วอยากให้เรื่องนี้:

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)

ปัญหาของฉันอยู่ใน serializing นี้สำหรับ LANGUAGE. ฉันต้องพบว่าต่อไปนี้ทำงานเพื่อ serialize ร้านอาหารวัตถุต้อง LANGUAGE แต่ไม่ใช่ครอบการตู้เย็นวัตถุ:

data = {
    'restaurants': []
}

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

ฉันค่อนข้างใหม่ที่จะต้องปลั๊กอินสำหรับไพธอน,และฉันมาจาก js พื้นหลังดังนั้นฉันยังคงจะคุ้นเคยกับรูปแบบการสั่งงาน. ของฉันคำถามคือจะทำยังไง serialize งๆภายในรายชื่อของ fridges?

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

คำตอบที่ดีที่สุด

0

อย่างแรกเลยก็คือฉันจะแนะนำให้ตรวจตรวจสอ dataclasses อย่างที่พวกเขาจะ simplify บหมายงานในการทำงานกับชั้นเรียนภาษาไพธอน. กับ dataclasses คุณไม่จำเป็นต้องกำหนด dunder วิธีการของอย่าง __init__ แล้ว __repr__ อย่างที่พวกเขาจะถูกสร้างโดยอัตโนมัติโดยปริยาย

สำหรับพิเศษของคุณใช้กรณีนี้คุณสามารถแก้ปัญหากับ serializing เป็นรอบการเรียนนางแบบเพื่อน dict /LANGUAGE ข้อความโดยใช้ข้อเลือกเพิ่ม default callable ว่าคุณสามารถผ่านไป json.dumps. อย่างเช่นคุณสามารถมองผ่านเป็น lambda(ซึ่งเป็นพื้นฐานแล้วเป็นช่วยย่อมันฟังก์ชัน)อย่างเช่น lambda o: o.__dict__ซึ่ง retrieves ง __dict__ แอททริบิวต์สำหรับวัตถุนั่นไม่ใช่ inherently serializable ต้อง LANGUAGE อย่างที่แสดงทางด้านล่างนี้

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 ตัวอย่างก่อน


ถึงแม้ว่าถ้าเธอมีอีกขั้นสูงใช้คดี-สำหรับตัวอย่างเช่นเดอ-serializing LANGUAGE ข้อมูลเป็นรอบการเรียนนางแบบหรือวางแผน dataclass สอย่างเช่น password ต้องอีก LANGUAGE ญแจสำคัญอย่างเช่น pw ที่อยู่ในรายชื่อตัวอย่างเช่นฉันจะแนะนำให้กำลังตรวจสอบ serialization องสมุดชอบ dataclass-พ่อมดนั่นใช้งานได้ดีกับครอบการ dataclass นางแบบเป็นทางด้านบน

2021-11-24 05:02:30

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่