Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Ketergantungan Pekeliling dalam Petua Jenis Python?

Bagaimana untuk Menyelesaikan Ketergantungan Pekeliling dalam Petua Jenis Python?

Susan Sarandon
Susan Sarandonasal
2024-10-21 21:48:31537semak imbas

How to Resolve Circular Dependencies in Python's Type Hints?

Petua Jenis: Menyelesaikan Kebergantungan Pekeliling

Dalam Python, kebergantungan bulat boleh timbul apabila dua kelas saling merujuk satu sama lain dalam pembayang jenisnya. Ini mengakibatkan NameError apabila cuba membuat instantiate salah satu kelas.

Pertimbangkan contoh berikut:

<code class="python">class Server:
    def register_client(self, client: Client)
        pass


class Client:
    def __init__(self, server: Server):
        server.register_client(self)</code>

Percubaan untuk membuat instantiate Klien akan gagal dengan NameError: name 'Client' is not ditakrifkan.

Menggunakan Rujukan Hadapan

Salah satu cara untuk menyelesaikan pergantungan bulat ini ialah menggunakan rujukan hadapan dalam pembayang jenis. Ini dilakukan dengan menyediakan nama rentetan untuk kelas yang belum ditakrifkan lagi:

<code class="python">class Server:
    def register_client(self, client: 'Client')
        pass</code>

Menangguhkan Penghuraian Anotasi

Penyelesaian lain yang diperkenalkan dalam Python 3.7 adalah untuk menangguhkan penghuraian masa jalan bagi anotasi sepenuhnya. Ini dicapai dengan menambahkan import berikut di bahagian atas modul:

<code class="python">from __future__ import annotations</code>

Dengan penghuraian anotasi ditangguhkan, anotasi disimpan sebagai perwakilan rentetan bagi pokok sintaks abstrak (AST) untuk ungkapan. Anda boleh menggunakan typing.get_type_hints() untuk menyelesaikan anotasi ini dan menyelesaikan rujukan hadapan seperti yang digunakan dalam contoh sebelumnya.

Untuk butiran lanjut, rujuk PEP 563: Penilaian Ditangguhkan Anotasi.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ketergantungan Pekeliling dalam Petua 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