gpt4 book ai didi

python - 通用代码的类型提示

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:24 24 4
gpt4 key购买 nike

假设我有这段代码:

class BaseModel(object):
pass

class AppleModel(BaseModel):
pass

class OrangeModel(BaseModel):
pass

def get_record(model, pk):
try:
result = model.objects.get(pk=pk)

# Some code working with BaseModel..

return result
except model.DoesNotExist:
return None

现在,我想像本示例中那样使用它并使用正确的类型注释...

myApple = get_record(AppleModel, 12)
myApple. # type hints for AppleModel

myOrange = get_record(OrangeModel, 433)
myOrange. # type hints for OrangeModel

我应该如何注释get_record函数?我尝试过类似的事情

def get_record(model: Type[BaseModel], id: int) -> Optional[BaseModel]:
# ...

但是随后,我丢失了有关子类的信息。我尝试使用 Generic ,但没有成功。

最佳答案

我假设您想要做的是让 get_record 接受 BaseModel 某个子类的类型,并返回相应类的实例。

在这种情况下,您可能需要使用 TypeVars -- 特别是 TypeVars with an upper bound restriction .

大致如下所示:

from typing import Type, Optional, TypeVar

# ...snip...

T = TypeVar('T', bound=BaseModel)

def get_record(model: Type[T], id: int) -> Optional[T]:
# ...

关于python - 通用代码的类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com