我可以以某种方式引用声明晚于 class 的 Python class 吗?我需要从中引用而不更改它们的顺序?

Can I somehow reference a Python class that is declared later than the class from which I need to reference without changing their order?

我有这两个 Python 类(代表 SQLAlchemy 模型的 Pydantic 模式):

class Role(RoleBase):
    id: int
    users: list[User] = []

    class Config:
        orm_mode = True

class User(UserBase):
    id: int
    date_created: datetime.datetime
    profile_image: Optional[str] = None

    class Config:
        orm_mode = True

我试过用 ForwardRef 做到这一点:

User = ForwardRef('User')
...
users: list[User] = []

或用引号括起来:

users: List['User'] = []

但我得到 TypeError: issubclass() arg 1 must be a class

有没有什么方法可以在不改变 类' 声明顺序的情况下实现这个

使用 pydantic.ForwardRef 时,您需要在 类 上调用 update_forward_refs 以更新它们。所以添加

Role.update_forward_refs()

定义User后。

如果PEP 649被接受,这一切都将是不必要的。