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!