簡體   English   中英

是否可以繼承 Python 類型注解?

[英]Is it possible to inherit Python type annotations?

我正在學習一種名為SQLModel的新工具,由 Sebastian Ramirez( FastAPI創建者)開發。

對於 SQLModel 中的基本 CRUD 操作,文檔告訴您有必要像這樣設置一個 model 實體:

from typing import Optional, List
from sqlmodel import Field, SQLModel, Relationship


class RoomBase(SQLModel):
    name: str
    is_ensuite: bool
    current_occupants: Optional[List[str]]
    house_id: Optional[int] = Field(default=None, foreign_key="house.id")

class Room(RoomBase, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    house: Optional["House"] = Relationship(back_populates="rooms")

class RoomCreate(RoomBase):
    pass

class RoomRead(RoomBase):
    id: int

class RoomUpdate(SQLModel):
    name: Optional[str] = None
    is_ensuite: Optional[bool] = None
    current_occupants: Optional[List[str]] = None
    house_id: Optional[int] = None

我上面的示例將創建一個名為Room的 model,它是House的一部分。 這必須對每個新的 model class 重復,這意味着我可以忘記將多個模型放在同一個文件中。

一點點 CRUD 就需要很多代碼,對吧??

因為我可能會在 90% 的時間內使用相同的 CRUD 設置(例如,我總是希望所有字段在更新時都是可編輯的,或者我總是只需要讀取 ID 等),它得到了我想知道是否可以抽象上述內容,以便不必為每個數據庫實體重復整個文件。

是否可以在 Python 中通過 inheritance 或其他方式傳遞字段和類型,這樣我只需要編寫一次上述代碼的通用版本,而不必為每個 model 都寫出來?

看來您正在使用 fastapi。 如果是這樣, fastapi-crudrouter呢? 它為我完成了大部分工作。 在谷歌搜索 fastapi-crudrouter 鏈接時,我發現了另一個項目FastAPIQuickCrud 只是略讀,但似乎解決了同樣的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM