Memahami Isu
Apabila mentakrifkan kaedah yang merujuk kepada lampiran kelas sebagai jenis pulangannya, anda mungkin menghadapi ralat rujukan yang tidak dapat diselesaikan. Mari kita pertimbangkan kod berikut dalam Python 3:
class Position: def __init__(self, x: int, y: int): self.x = x self.y = y def __add__(self, other: Position) -> Position: return Position(self.x + other.x, self.y + other.y)
Kod ini gagal dengan NameError kerana kelas Position tidak ditakrifkan dalam skop kaedah __add__.
Menyelesaikan Isu
Python 3.11 dengan Jenis 'Self':
Dalam Python 3.11 dan versi yang lebih baru, anda boleh menggunakan jenis Self untuk merujuk kelas yang disertakan dalam pembayang jenis:
from typing import Self class Position: def __add__(self, other: Self) -> Self: return Position(self.x + other.x, self.y + other.y)
Python 3.7 dengan '__future__ import anotasi':
Jika anda menggunakan Python 3.7 atau lebih baharu, anda boleh mendayakan penilaian anotasi yang ditangguhkan dengan menambahkan pernyataan import berikut:
from __future__ import annotations
Dengan ini didayakan, pembayang jenis akan disimpan sebagai rentetan sehingga modul dimuatkan sepenuhnya, menyelesaikan rujukan isu:
class Position: def __add__(self, other: Position) -> Position: return Position(self.x + other.x, self.y + other.y)
Python <3.7:
Untuk versi Python di bawah 3.7, anda boleh menentukan rujukan rentetan kepada kelas yang disertakan menggunakan petikan tunggal:
class Position: def __add__(self, other: 'Position') -> 'Position': return Position(self.x + other.x, self.y + other.y)Ini mencipta rujukan hadapan yang akan diselesaikan sebaik sahaja kelas ditentukan.
Tambahan Nota:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Petua Jenis dengan Baik untuk Kelas Terlampir dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!