Maison > développement back-end > Tutoriel Python > Comment taper Hint une méthode avec le type de classe englobante en Python ?

Comment taper Hint une méthode avec le type de classe englobante en Python ?

Mary-Kate Olsen
Libérer: 2024-12-27 19:04:10
original
804 Les gens l'ont consulté

How to Type Hint a Method with the Enclosing Class Type in Python?

Comment puis-je taper un indice sur une méthode avec le type de la classe englobante ?

Les indices de type sont utilisés en Python pour indiquer le type attendu d'une variable ou la valeur de retour d'une fonction. Ils fournissent un moyen de documenter le comportement prévu du code et peuvent aider à détecter les erreurs plus tôt.

Énoncé du problème :

Vous avez le code suivant dans 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)
Copier après la connexion

Cependant, votre éditeur (PyCharm) signale une erreur, indiquant que la référence à Position dans l'indice de type de __add__ ne peut pas être résolu. Cela soulève la question : Comment pouvez-vous spécifier que le type de retour doit être de type Position ?

Solution :

En Python, il existe trois approches principales pour l'indication de type une méthode avec le type de sa classe englobante, selon la version de Python que vous utilisez :

Python 3.11 :

from typing import Self

class Position:
    def __add__(self, other: Self) -> Self:
        ...
Copier après la connexion

Python 3.7 avec les annotations d'importation from __future__ :

from __future__ import annotations

class Position:
    def __add__(self, other: Position) -> Position:
        ...
Copier après la connexion

Python 3.6 et Plus tôt :

class Position:
    def __add__(self, other: 'Position') -> 'Position':
        ...
Copier après la connexion

Explication :

  • Python 3.11 : Introduit une nouvelle annotation de type, Self, spécialement conçue pour référencer le type de boîtier class.
  • Python 3.7 avec from __future__ import annotations : Permet l'évaluation différée des annotations de type, en les stockant sous forme de chaînes jusqu'à ce que le module soit complètement chargé.
  • Python 3.6 et versions antérieures : Utilise une représentation sous forme de chaîne du nom de la classe dans le type soupçon.

Exigence de pré-compilation :

Dans les versions Python antérieures à 3.7, l'utilisation de chaînes dans les conseils de type nécessite que la classe référencée soit définie avant son utilisation dans l'annotation de type. Sinon, vous rencontrerez une NameError.

Considérations :

  • L'utilisation de Self est préférable dans Python 3.11 car elle fournit une manière plus explicite et plus lisible de référencer le type englobant.
  • Dans Python 3.7 et versions ultérieures, à partir de l'importation __future__ les annotations peuvent améliorer considérablement les performances du code qui importe le module de saisie.
  • Dans les versions Python antérieures à 3.6, l'approche basée sur les chaînes est la seule option pour indiquer la classe englobante.

N'oubliez pas que les astuces de type sont facultatives, mais elles peuvent améliorer considérablement la lisibilité du code, la vérification des erreurs et la maintenabilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal