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

Bagaimana untuk Menyelesaikan Isu Import Kitaran untuk Pembayang Jenis dengan Kelas Mixin dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-10-23 13:35:30775semak imbas

How to Resolve Cyclic Import Issues for Type Hinting with Mixin Classes in Python?

Petunjuk Jenis Python tanpa Import Kitaran

Masalah:

Mengimport modul dengan kebergantungan kitaran memperkenalkan pengecualian runtime apabila pembayang jenis digunakan bersama dengan kelas mixin.

Butiran:

Dalam Python 3.4, kelas dipecahkan kepada dua fail (main.py dan mymixin .py), di mana mymixin.py mengandungi kelas mixin yang mewarisi daripada kelas utama dalam main.py (iaitu, kelas Main(objek, MyMixin):). Pembayang taip dalam kaedah MyMixin memerlukan penentuan jenis pulangan sebagai 'Utama', yang membawa kepada isu import kitaran.

Penyelesaian Python 3.4:

Untuk memintas import kitaran sementara pembayang jenis, pendekatan tersuai menggunakan pengisytiharan hadapan digunakan. Dengan menggunakan pemalar 'TYPE_CHECKING' daripada modul 'typing', pernyataan import dalam blok anotasi jenis diabaikan semasa masa jalan. Anotasi jenis 'Utama' juga ditukar kepada rentetan untuk mengisytiharkannya ke hadapan.

Penyelesaian Python 3.7 (PEP 563):

Menggunakan 'daripada masa hadapan pernyataan import anotasi import, semua anotasi jenis menjadi rentetan dan dilangkau semasa penilaian masa jalan, menjadikan sintaks pengisytiharan hadapan lebih bersih.

Walaupun ada penyelesaian ini, menggunakan campuran dengan pembayang jenis mungkin masih memerlukan penstrukturan semula untuk memastikan bahawa kedua-dua pemeriksaan jenis PyCharm dan mypy berfungsi seperti yang diharapkan. Mypy mengesyorkan membuat ABC yang daripadanya kedua-dua kelas utama dan kelas campuran diwarisi.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Isu Import Kitaran untuk Pembayang Jenis dengan Kelas Mixin 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