Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Mengendalikan Petua Jenis dengan Baik untuk Kelas Terlampir dalam Python?

Bagaimanakah Saya Boleh Mengendalikan Petua Jenis dengan Baik untuk Kelas Terlampir dalam Python?

Barbara Streisand
Lepaskan: 2024-12-18 00:35:11
asal
371 orang telah melayarinya

How Can I Properly Handle Type Hints for Enclosed Classes in Python?

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

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

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

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

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:

  • Jika menggunakan definisi tiruan atau tampalan monyet untuk menambah anotasi, pastikan anotasi menggambarkan jenis kelas dengan tepat.
  • Dalam Python 3.10, penilaian yang ditangguhkan bagi anotasi dijadualkan menjadi lalai, tetapi sejak itu telah ditangguhkan ke masa hadapan lepaskan.

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!

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