>백엔드 개발 >파이썬 튜토리얼 >Python에서 바깥쪽 클래스 유형을 사용하여 메서드에 힌트를 입력하는 방법은 무엇입니까?

Python에서 바깥쪽 클래스 유형을 사용하여 메서드에 힌트를 입력하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-27 19:04:10805검색

How to Type Hint a Method with the Enclosing Class Type 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)

그러나 편집자(PyCharm)가 오류 플래그를 지정하여 유형 힌트에서 Position에 대한 참조가 있음을 나타냅니다. __add__을(를) 해결할 수 없습니다. 그러면 질문이 생깁니다. 반환 유형이 Position 유형이어야 함을 어떻게 지정할 수 있습니까?

해결책:

Python에는 유형 힌트에 대한 세 가지 주요 접근 방식이 있습니다. 사용 중인 Python 버전에 따라 바깥쪽 클래스 유형이 포함된 메서드:

Python 3.11:

from typing import Self

class Position:
    def __add__(self, other: Self) -> Self:
        ...

from __future__ 가져오기 주석이 있는 Python 3.7:

from __future__ import annotations

class Position:
    def __add__(self, other: Position) -> Position:
        ...

Python 3.6 및 이전:

class Position:
    def __add__(self, other: 'Position') -> 'Position':
        ...

설명:

  • Python 3.11: 특별히 설계된 새로운 유형 주석인 Self를 소개합니다. 둘러싸는 유형을 참조하기 위해 class.
  • from __future__ 가져오기 주석이 포함된 Python 3.7: 유형 주석의 연기된 평가를 활성화하여 모듈이 완전히 로드될 때까지 문자열로 저장합니다.
  • Python 3.6 이하: 유형에서 클래스 이름의 문자열 표현을 사용합니다. 힌트.

컴파일 전 요구 사항:

3.7 이전 Python 버전에서 유형 힌트에 문자열을 사용하려면 참조되는 클래스가 정의되어 있어야 합니다. 유형 주석에 사용되기 전에. 그렇지 않으면 NameError가 발생합니다.

고려 사항:

  • Python 3.11에서는 Self를 사용하는 것이 더 명확하고 읽기 쉬운 참조 방법을 제공하므로 선호됩니다. 바깥쪽 유형.
  • Python 3.7 이상에서는 from __future__ import 주석은 타이핑 모듈을 가져오는 코드의 성능을 크게 향상시킬 수 있습니다.
  • Python 3.6 이전 버전에서는 문자열 기반 접근 방식이 바깥쪽 클래스를 유형 힌트하는 유일한 옵션입니다.

유형 힌트는 선택 사항이지만 코드 가독성, 오류 검사 및 유지 관리성을 크게 향상시킬 수 있다는 점을 기억하세요.

위 내용은 Python에서 바깥쪽 클래스 유형을 사용하여 메서드에 힌트를 입력하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.