Taip Mengisyaratkan Kaedah dengan Jenis Kelas Melampirkan
Dalam Python, adalah mungkin untuk menaip kaedah pembayang untuk menentukan jenis jangkaan argumen mereka dan mengembalikan nilai. Walau bagaimanapun, apabila berurusan dengan kaedah yang merujuk kepada jenis kelas yang disertakan, anda mungkin menghadapi kesamaran disebabkan sifat dinamik Python.
Masalah dengan Rujukan Hadapan
Pertimbangkan coretan kod berikut:
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)
Di sini, kaedah __add__ menjangkakan Kedudukan lain contoh sebagai hujah dan mengembalikan contoh Kedudukan. Walau bagaimanapun, Python tidak membenarkan rujukan hadapan dalam pembayang jenis, jadi menggunakan nama kelas Position secara langsung dalam anotasi akan mengakibatkan ralat.
Menggunakan 'Self' untuk Rujukan Hadapan (Python 3.11 )
Dengan pengenalan PEP 673 dalam Python 3.11, jenis Diri boleh didapati daripada modul menaip. Menggunakan Diri membenarkan rujukan hadapan kepada jenis kelas yang disertakan:
from typing import Self class Position: def __init__(self, x: int, y: int): self.x = x self.y = y def __add__(self, other: Self) -> Self: return Position(self.x + other.x, self.y + other.y)
Menggunakan 'dari masa hadapan anotasi import' (Python 3.7 )
Dalam Python 3.7 dan kemudian, pernyataan masa hadapan anotasi import dari __future__ membolehkan penilaian ditangguhkan anotasi. Ini bermakna anotasi jenis akan disimpan sebagai rentetan dan dinilai kemudian apabila modul dimuatkan sepenuhnya:
from __future__ import annotations 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)
Menggunakan Rentetan untuk Rujukan Hadapan (Python Versi Lebih Lama Daripada 3.7)
Sebelum Python 3.7, menggunakan rentetan dan bukannya nama kelas adalah pendekatan yang disyorkan untuk ke hadapan rujukan:
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)
Ini akan berfungsi selagi definisi kelas ditemui sebelum pembayang jenis ini ditemui. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penggunaan rentetan untuk pembayang jenis mungkin tidak disokong oleh semua editor kod atau alat analisis.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menaip Petunjuk Kaedah Menggunakan Jenis Kelas Melampirkan dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!