> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 닫힌 클래스에 대한 유형 힌트를 어떻게 적절하게 처리할 수 있습니까?

Python에서 닫힌 클래스에 대한 유형 힌트를 어떻게 적절하게 처리할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-18 00:35:11
원래의
321명이 탐색했습니다.

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

Python에서 닫힌 클래스에 대한 유형 힌트 처리

문제 이해

인클로징을 참조하는 메서드를 정의할 때 클래스를 반환 유형으로 사용하면 해결되지 않은 참조 오류가 발생할 수 있습니다. 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)
로그인 후 복사

Position 클래스가 __add__ 메서드의 범위 내에 정의되지 않았기 때문에 이 코드는 NameError와 함께 실패합니다.

이슈

'Self'가 포함된 Python 3.11 유형:

Python 3.11 이상 버전에서는 Self 유형을 사용하여 유형 힌트 내에서 바깥쪽 클래스를 참조할 수 있습니다.

from typing import Self

class Position:

    def __add__(self, other: Self) -> Self:
        return Position(self.x + other.x, self.y + other.y)
로그인 후 복사

'__future__를 사용하는 Python 3.7 주석 가져오기':

Python을 사용하는 경우 3.7 이상에서는 다음 import 문을 추가하여 연기된 주석 평가를 활성화할 수 있습니다.

from __future__ import annotations
로그인 후 복사

이를 활성화하면 모듈이 완전히 로드될 때까지 유형 힌트가 문자열로 저장되어 참조를 해결합니다. 문제:

class Position:

    def __add__(self, other: Position) -> Position:
        return Position(self.x + other.x, self.y + other.y)
로그인 후 복사

Python <3.7:

3.7 이하 Python 버전의 경우 작은따옴표를 사용하여 둘러싸는 클래스에 대한 문자열 참조를 지정할 수 있습니다.

class Position:

    def __add__(self, other: 'Position') -> 'Position':
        return Position(self.x + other.x, self.y + other.y)

이렇게 하면 다음과 같은 전방 참조가 생성됩니다. 클래스가 정의되면 해결됩니다.

추가 참고:

  • 주석을 추가하기 위해 더미 정의 또는 원숭이 패치를 사용하는 경우 주석이 클래스 유형을 정확하게 반영하는지 확인하세요.
  • Python 3.10에서는 연기된 평가 특수효과는 기본값으로 설정될 예정이었으나 향후 릴리스로 연기되었습니다.

위 내용은 Python에서 닫힌 클래스에 대한 유형 힌트를 어떻게 적절하게 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿