Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Import Kitaran untuk Pembayang Jenis dalam Python?

Bagaimana untuk Menyelesaikan Import Kitaran untuk Pembayang Jenis dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-10-23 12:27:01392semak imbas

How to Resolve Cyclic Imports for Type Hinting in Python?

Taip Pembayang dalam Python Tanpa Import Kitaran

Dalam percubaan untuk membahagikan kelas besar kepada dua yang lebih kecil, anda menghadapi isu kitaran import. Kelas "utama" mengimport kelas mixin, dan kelas mixin merujuk kelas "utama" dalam pembayang jenisnya. Ini menghasilkan kitaran import, menghalang pembayang jenis daripada berfungsi dengan betul.

Untuk menyelesaikannya, anda boleh mempertimbangkan pendekatan berikut:

<code class="python"># 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):
        ...</code>
<code class="python"># 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):
        ...</code>

Dalam contoh ini, TYPE_CHECKING Python pemalar digunakan untuk mengimport kelas "utama" secara bersyarat. Apabila menjalankan kod, pernyataan import dilangkau kerana pemalar adalah Palsu. Walau bagaimanapun, alat semakan taip seperti mypy mentafsir kod dalam blok if TYPE_CHECKING dan mengenali anotasi jenis untuk func2.

Pendekatan lain melibatkan penggunaan rujukan hadapan:

<code class="python"># 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'):
        ...</code>

Di sini, anotasi jenis untuk func2 ialah rentetan yang mewakili nama kelas yang akan diimport kemudian. Kedua-dua pendekatan memerlukan penggunaan Python 3.7 atau lebih tinggi untuk berfungsi dengan berkesan dengan pembayang jenis.

Ingat bahawa menggunakan campuran dan pembayang jenis mungkin memerlukan penstrukturan tambahan dalam kod anda. Sebagai contoh, mypy mengesyorkan membuat Kelas Asas Abstrak (ABC) yang diwarisi oleh kedua-dua kelas "utama" dan campuran anda. Ini boleh meningkatkan ketepatan semakan jenis.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Import Kitaran untuk Pembayang Jenis dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn