Какой из способов использования подсказок типов Python с Django Models является правильным?

Какой из этих способов является правильным для использования аннотаций типов для моделей django?

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

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

def func(arg: Generic[_T]):
    ...

Or

from typing import Type
from app.models import MyModel

def func(arg: Type(MyModel)):
    ...

Or

from app.models import MyModel

def func(arg: MyModel):
    ...

Если arg должен быть MyModel объектом , то вы используете:

from app.models import MyModel


def func(arg: MyModel):
    pass

или вы можете не импортировать MyModel, если вам не нужно работать с ним с помощью:

from typing import TYPE_CHECKING
from __future__ import annotations

if TYPE_CHECKING:
    from app.models import MyModel


def func(arg: 'MyModel'):
    # …
    pass

поскольку импорт только для подсказок типов может легко привести к циклическим ошибкам импорта.

Они также принимают подклассы, так что если MyModel является, например, абстрактной базовой моделью, то подмодели также действительны для подсказок типа.

Использование Generic само по себе не имеет особого смысла: оно используется для определения конкретного намека на тип, например Dict. Более того, Type(MyModel) означает, что вы передаете сам тип, который является подклассом MyModel, это означает, что вы передаете ссылку, например, на класс MyModel, а не объект MyModel.

Вернуться на верх