Распаковка определения класса для совместного использования имен переменных между объектами

Хотя может быть лучший способ сформулировать вопрос, идея довольно проста.

У меня два класса. Parcel и ParcelRequest. ParcelRequest используется в API для запроса информации об Parcel с заданными параметрами и

По сути, ParcelRequest требует тех же параметров, что и Parcel, но требует дополнительных quantity ценность.

from pydantic import BaseModel

class Parcel(BaseModel):
    length: float
    width: float
    height: float
    weight: float


class ParcelRequest(BaseModel):
    length: float
    width: float
    height: float
    weight: float
    quantity: int

Есть ли способ синхронизировать Parcel и ParcelRequest при каждом изменении Parcel?

from pydantic import BaseModel

class Parcel(BaseModel):
    length: float
    width: float
    height: float
    weight: float


class ParcelRequest(BaseModel):
    # unpack Parcel attributes here
    quantity: int

ПРИМЕЧАНИЕ. В этом конкретном примере мы не можем изменить структуру входящего запроса. Это означает, что мы не можем просто включить в ParcelRequest атрибут "parcel", который ссылается на объект Parcel, так как это изменит структуру запроса.

Вопрос в том, можно ли это сделать. Но в качестве бонуса нужно ли это делать? Я считаю, что, хотя API будет оставаться в курсе последних достижений Parcel по мере его развития, разработчик может непреднамеренно нарушить работу API, обновив Parcel, если к нему не обращаться осторожно и без надлежащих тестов.

1 ответ

Не повторяйтесь, сформулируйте класс, от которого нужно наследовать:

class MetaParcel(BaseModel):
    length: float
    width: float
    height: float
    weight: float


class ParcelRequest(MetaParcel):
    quantity: int
Другие вопросы по тегам