Apabila mentakrifkan kelas dengan pembayang jenis yang merujuk antara satu sama lain, ralat pergantungan bulat mungkin berlaku, menyebabkan pembayang jenis tidak berkesan. Ralat ini sering ditunjukkan sebagai NameError, yang menunjukkan bahawa nama kelas tidak boleh ditemui dalam ruang nama semasa.
Pertimbangkan coretan kod 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>
Dalam contoh ini, kelas Pelayan menjangkakan objek Klien sebagai hujah kepada kaedah register_clientnya, manakala kelas Klien menjangkakan contoh Pelayan dalam pembinanya. Walau bagaimanapun, kebergantungan bulat ini menyebabkan kod gagal dengan NameError: nama 'Pelanggan' tidak ditakrifkan.
Satu penyelesaian kepada masalah ini ialah menggunakan rujukan hadapan. Dengan mengisytiharkan Klien sebagai rentetan dalam pembayang jenis, jurubahasa boleh menyelesaikan pergantungan itu kemudian.
<code class="python">class Server: def register_client(self, client: 'Client') pass</code>
Sebagai alternatif, Python 3.7 memperkenalkan penilaian anotasi yang ditangguhkan. Dengan menambahkan masa hadapan import daripada anotasi import __future__ pada permulaan modul, anotasi disimpan sebagai perwakilan rentetan pepohon sintaks abstrak. Anotasi ini boleh diselesaikan kemudian menggunakan typing.get_type_hints().
<code class="python">from __future__ import annotations class Server: def register_client(self, client: Client) pass</code>
Atas ialah kandungan terperinci Bagaimanakah Ketergantungan Pekeliling dalam Petunjuk Jenis Boleh Diselesaikan untuk Penguatkuasaan Jenis Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!