문제 이해
인클로징을 참조하는 메서드를 정의할 때 클래스를 반환 유형으로 사용하면 해결되지 않은 참조 오류가 발생할 수 있습니다. 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에서 닫힌 클래스에 대한 유형 힌트를 어떻게 적절하게 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!