Bagaimana untuk Mengelakkan Import Kitaran dalam Pembayang Jenis Python?

Linda Hamilton
Lepaskan: 2024-10-23 13:34:02
asal
201 orang telah melayarinya

How to Avoid Cyclic Imports in Python's Type Hinting?

Taip Pembayang dalam Python Tanpa Import Kitaran

Masalah:

Apabila memisahkan kelas yang besar ke dalam berbilang fail, import kitaran boleh menghalang pembayang jenis daripada berfungsi dengan betul. Khususnya, mengimport kelas "utama" dalam kelas mixin mewujudkan kebergantungan bulat yang menghalang semakan jenis.

Penyelesaian:

Untuk Python 3.4:

Gunakan struktur kod berikut:

<code class="python"># main.py

import mymixin.py

class Main(object, MyMixin):
    def func1(self, xxx):
        ...

# mymixin.py

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: 'Main', xxx):  # Note the string type hint
        ...</code>
Salin selepas log masuk

Pemalar TYPE_CHECKING memastikan import main.py hanya dinilai semasa pemeriksaan jenis, mengelakkan ralat import kitaran.

Untuk Python 3.7 :

Python 3.7 memperkenalkan penyelesaian yang lebih elegan:

<code class="python"># main.py

import mymixin.py

class Main(object, MyMixin):
    def func1(self, xxx):
        ...

# mymixin.py

from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: Main, xxx):  # No need for a string type hint
        ...</code>
Salin selepas log masuk

Import anotasi import masa hadapan membolehkan pembayang jenis rentetan dan mengelak daripada menilai mereka pada masa jalan.

Pertimbangan Tambahan:

  • Mypy mungkin memerlukan mencipta kelas asas abstrak (ABC) yang diwarisi oleh Main dan MyMixin untuk memastikan semakan jenis yang betul.
  • Pemeriksa PyCharm juga mungkin memerlukan pendekatan yang sama untuk keserasian maksimum.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Import Kitaran dalam Pembayang Jenis 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!