>백엔드 개발 >파이썬 튜토리얼 >Python에서 바깥쪽 클래스 유형을 사용하여 메소드에 힌트를 입력하려면 어떻게 해야 합니까?

Python에서 바깥쪽 클래스 유형을 사용하여 메소드에 힌트를 입력하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-18 02:26:09276검색

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

인클로징 클래스 유형으로 메소드 유형 힌트

Python에서는 힌트 메소드를 입력하여 인수의 예상 유형을 지정할 수 있습니다. 그리고 반환 값. 그러나 바깥쪽 클래스 유형을 참조하는 메서드를 처리할 때 Python의 동적 특성으로 인해 모호성에 직면할 수 있습니다.

전방 참조 문제

다음을 고려하세요. 다음 코드 조각:

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)

여기서 __add__ 메서드는 또 다른 Position 인스턴스를 기대합니다. 인수로 사용하고 Position 인스턴스를 반환합니다. 그러나 Python은 유형 힌트에서 전방 참조를 허용하지 않으므로 주석에 Position 클래스 이름을 직접 사용하면 오류가 발생합니다.

정방향 참조에 'Self' 사용(Python 3.11)

Python 3.11에서 PEP 673이 도입되면서 타이핑에서 Self 유형을 사용할 수 있습니다. 모듈. Self를 사용하면 바깥쪽 클래스 유형에 대한 전방 참조가 허용됩니다.

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)

'from future 가져오기 주석'(Python 3.7)

을 사용합니다. Python 3.7 이상에서는 from __future__ import 주석 future 문을 사용하면 다음의 평가를 연기할 수 있습니다. 주석. 이는 유형 주석이 문자열로 저장되고 나중에 모듈이 완전히 로드될 때 평가된다는 것을 의미합니다.

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)

정방향 참조에 문자열 사용(3.7보다 오래된 Python 버전)

Python 3.7 이전에는 클래스 이름 대신 문자열을 사용하는 것이 전달에 권장되는 접근 방식이었습니다. 참조:

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)

이러한 유형 힌트가 발생하기 전에 클래스 정의가 발견되는 한 이는 작동합니다. 그러나 유형 힌트를 위해 문자열을 사용하는 것은 모든 코드 편집기나 분석 도구에서 지원되지 않을 수 있다는 점에 유의하는 것이 중요합니다.

위 내용은 Python에서 바깥쪽 클래스 유형을 사용하여 메소드에 힌트를 입력하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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