programing

사용자 정의 클래스가 있는 힌트 입력

powerit 2023. 6. 22. 22:33
반응형

사용자 정의 클래스가 있는 힌트 입력

확실한 답을 찾지 못했습니다.함수에 대한 유형 힌트를 수행하고 유형은 정의한 사용자 지정 클래스입니다.CustomClass().

그리고 어떤 기능으로 말하자면, 그것을 부르자.FuncA(arg)나는 한 가지 주장이 있습니다.arg힌트를 입력하는 올바른 방법FuncA대상:

def FuncA(arg: CustomClass):

아니면 다음과 같습니다.

from typing import Type

def FuncA(Arg:Type[CustomClass]):

만약 그렇다면, 전자가 맞습니다.arg인스턴스를 허용합니다.

def FuncA(arg: CustomClass):
    #     ^ instance of CustomClass

클래스 자체(또는 하위 유형)를 원하는 경우 다음과 같이 기록해야 합니다.

from typing import Type  # you have to import Type

def FuncA(arg: Type[CustomClass]):
    #     ^ CustomClass (class object) itself

입력에 대한 설명서에 나와 있는 것처럼:

class typing.Type(Generic[CT_co])

주석이 달린 변수C형식 값을 사용할 수 있습니다.C이와 대조적으로 로 주석이 달린 변수는 클래스 자체인 값을 허용할 수 있습니다. 특히 의 클래스 개체를 허용합니다.

설명서에는 다음과 같은 예가 포함되어 있습니다.int클래스:

a = 3         # Has type 'int'
b = int       # Has type 'Type[int]'
c = type(a)   # Also has type 'Type[int]'

Willm Van Onsem의 답변은 물론 맞지만, 저는 작은 업데이트를 제공하고 싶습니다.PEP 585에서는 표준 컬렉션에 유형 암시 제네릭이 도입되었습니다.예를 들어, 이전에는 예를 들어 이렇게 말해야 했습니다.

from typing import Dict

foo: Dict[str, str] = { "bar": "baz" }

이제 우리는 병렬 유형 계층 구조를 포기할 수 있습니다.typing모듈을 구성하고 간단히 말합니다.

foo: dict[str, str] = { "bar": "baz" }

이 기능은 python 3.9+에서 사용할 수 있으며 사용하는 경우 3.7+에서도 사용할 수 있습니다.from __future__ import annotations.

이 구체적인 질문의 관점에서 보면, 그것은 대신에from typing import Type이제 기본 제공 기능을 사용하여 클래스에 주석을 달 수 있습니다.type:

def FuncA(arg: type[CustomClass]):

언급URL : https://stackoverflow.com/questions/44664040/type-hints-with-user-defined-classes

반응형