사용자 정의 클래스가있는 유형 힌트


109

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

그리고 어떤 함수에서 그것을 호출 해 봅시다 . FuncA(arg)라는 하나의 인수가 arg있습니다. 힌트를 입력하는 올바른 방법은 FuncA다음과 같습니다.

def FuncA(arg: CustomClass):

또는 다음과 같습니다.

def FuncA(Arg:Type[CustomClass]):?

답변:


130

전자는 올 경우, arg수용 의 인스턴스를CustomClass :

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

클래스 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. 반대로, 가변 주석이 Type[C]자신있는 클래스 값을 허용 할 수있다 - 즉, 그것은 허용 할 클래스 개체C .

설명서에는 int클래스 와 함께 예제가 포함되어 있습니다 .

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

1
Typepy3.6 이후부터? 나는 단지 NameError.
cs95

3
동일한 파일에 클래스가있는 경우 유형 힌트가 평가 될 때 존재해야합니다.
576i

13
@ 576i : iirc, 문자열을 사용할 수도 있습니다. 따라서 유형을 즉시로드 할 필요가 없다는 점 def foo(bar: 'Qux')def foo(bar: Qux)제외하면 과 동일 합니다.
Willem Van Onsem

2
@willem 감사합니다-나는 그것을 몰랐습니다. 무엇이 최선의, pycharm 자동 완성은 여전히 작동 ..
576i와

3
@ cs95 예. 모든 유형 힌트는 +3.7입니다.
thiras
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.