Python에서 메서드에 같은 클래스 타입을 힌트로 사용하는 방법
문제 상황: “NameError: name ‘Classname’ is not defined”
Python에서 클래스를 정의할 때, 해당 클래스의 메서드가 같은 클래스의 인스턴스를 인자로 받거나 반환해야 하는 경우가 있습니다. 이때 클래스 내부에서 자기 자신의 타입을 힌트로 지정하려고 하면, 종종 NameError: name 'Classname' is not defined
이라는 오류가 발생합니다.
“from future import annotations” 사용하기
Python 3.7 이상에서는 from __future__ import annotations
를 사용하여 이 문제를 해결할 수 있습니다. 이 코드를 파일의 맨 위에 추가하면, 아직 정의되지 않은 타입을 힌트로 사용할 수 있게 됩니다.
1
2
3
4
5
from __future__ import annotations
class MyClass:
def my_method(self, param: MyClass) -> MyClass:
return param
“TYPE_CHECKING” 활용하기
typing
모듈의 TYPE_CHECKING
을 사용하면, 타입 검사기가 실행될 때만 특정 코드가 수행되도록 설정할 수 있습니다. 이렇게 하면 런타임에서는 NameError
를 피할 수 있습니다.
1
2
3
4
5
6
7
8
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from . import MyClass # 여기서 '.'는 현재 패키지를 의미합니다.
class MyClass:
def my_method(self, param: MyClass) -> MyClass:
return param
문자열 사용하기
Python 3.5 이상에서는 타입 힌트로 클래스 이름을 문자열로 감싸서 사용할 수 있습니다.
1
2
3
class MyClass:
def my_method(self, param: 'MyClass') -> 'MyClass':
return param
이렇게 해서, Python에서 메서드에 같은 클래스 타입을 힌트로 지정하는 다양한 방법을 살펴보았습니다. 이 문제를 해결하는 가장 적합한 방법은 사용하고 있는 Python의 버전과 프로젝트의 요구사항에 따라 다를 수 있으니, 상황에 맞게 선택하세요.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.