Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengelakkan Import Kitaran dalam Pembayang Jenis Python?

Bagaimana untuk Mengelakkan Import Kitaran dalam Pembayang Jenis Python?

Linda Hamilton
Linda Hamiltonasal
2024-10-23 13:34:02300semak imbas

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>

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>

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!

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