我可以以某种方式引用声明晚于 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被接受,这一切都将是不必要的。
我有这两个 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被接受,这一切都将是不必要的。