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

Linda Hamilton
Lepaskan: 2024-10-23 13:35:30
asal
773 orang telah melayarinya

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!