«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как разрешить циклический импорт для подсказок типов в Python?

Как разрешить циклический импорт для подсказок типов в Python?

Опубликовано 17 ноября 2024 г.
Просматривать:842

How to Resolve Cyclic Imports for Type Hinting in Python?

Подсказка типов в Python без циклического импорта

При попытке разделить большой класс на два меньших возникает проблема циклического импорта. импорт. Класс «main» импортирует класс примеси, а класс примеси ссылается на «основной» класс в подсказке типа. Это приводит к циклу импорта, препятствующему правильной работе подсказки типа.

Чтобы решить эту проблему, вы можете рассмотреть следующий подход:

# main.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from mixin import MyMixin

class Main(object):
    def func1(self, xxx: Any):
        ...
# mixin.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: Main, xxx: Any):
        ...

В этом примере константа TYPE_CHECKING Python используется для условного импорта «основного» класса. При запуске кода оператор импорта пропускается, поскольку константа имеет значение False. Однако инструменты проверки типов, такие как mypy, интерпретируют код внутри блока if TYPE_CHECKING и распознают аннотацию типа для func2.

Другой подход предполагает использование прямой ссылки:

# mixin.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self, xxx: 'Main'):
        ...

Здесь аннотация типа для func2 представляет собой строку, представляющую имя класса, который будет импортирован позже. Оба подхода требуют использования Python 3.7 или выше для эффективной работы с подсказками типов.

Помните, что использование примесей и подсказок типов может потребовать дополнительного структурирования вашего кода. Например, mypy рекомендует создать абстрактный базовый класс (ABC), от которого наследуются ваши «основной» и миксин-классы. Это может повысить точность проверки типов.

Заявление о выпуске Эта статья перепечатана по адресу: 1729656617. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3