gpt4 book ai didi

python - 哪一种是在 Django 模型中使用 Python 类型提示的正确方法?

转载 作者:行者123 更新时间:2023-12-05 05:37:09 27 4
gpt4 key购买 nike

以下哪一项是为 Django 模型使用类型注释的正确方法?

from typing import TypeVar, Generic
from app.models import User

_T = TypeVar("_T", bound=User)

def func(user: Generic[_T]):
user.name = 'John'
user.save()

或者

from typing import Type
from app.models import User

def func(user: Type(User)):
user.name = 'John'
user.save()

或者

from app.models import User

def func(user: User):
user.name = 'John'
user.save()

最佳答案

如果 arg 应该是一个 MyModel object,那么您可以使用:

from app.models import User


def func(arg: <b>User</b>):
user.name = 'John'
user.save()

或者如果您不需要使用 MyModel,您可以避免导入它:

from typing import TYPE_CHECKING
from __future__ import annotations

if <b>TYPE_CHECKING</b>:
from app.models import User


def func(arg: <b>'User'</b>):
user.name = 'John'
user.save()

因为仅针对类型提示导入很容易导致循环导入错误。

这些也将接受子类,所以如果 MyModel 是一个抽象基础模型,那么子模型对于类型提示也是有效的.

使用 Generic 本身没有多大意义:它用于定义特定类型提示本身,例如 Dict。此外 Type(MyModel) 意味着您将传递类型本身,它是 MyModel 的子类,因此这意味着您传递对 MyModel< 的引用 类,而不是 MyModel 对象。

关于python - 哪一种是在 Django 模型中使用 Python 类型提示的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73174839/

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