Bagaimana untuk Menyelesaikan Import Kitaran untuk Pembayang Jenis dalam Python?

Linda Hamilton
Lepaskan: 2024-10-23 12:27:01
asal
498 orang telah melayarinya

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>
Salin selepas log masuk
<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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan