Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengendalikan Petua Jenis dengan Baik untuk Kelas Terlampir dalam Python?
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!