Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Menaip Petunjuk Kaedah Menggunakan Jenis Kelas Melampirkan dalam Python?

Bagaimanakah Saya Boleh Menaip Petunjuk Kaedah Menggunakan Jenis Kelas Melampirkan dalam Python?

Linda Hamilton
Lepaskan: 2024-12-18 02:26:09
asal
275 orang telah melayarinya

How Can I Type Hint a Method Using the Enclosing Class Type in Python?

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)
Salin selepas log masuk
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan