유형 힌팅 자체를 반환하는 자식 클래스

dbokers

추상 부모 대신 자식 클래스 메서드가 자신을 반환하는 것으로 알려져 있도록 추상 부모 클래스 메서드를 입력하는 방법이 있습니까?

class Parent(ABC):
    @abstractmethod
    def method(self) -> [what to hint here]:
        pass

class Child1(Parent)
    def method(self):
        pass

    def other_method(self):
        pass

class GrandChild1(Child1)
    def other_method_2(self):
        pass

이것은 PyCharm 또는 VScode의 python 플러그인과 같은 IDE의 자동 완성을 개선하기위한 것입니다.

juanpa.arrivillaga

따라서 일반적인 접근 방식은 여기 문서에 설명되어 있습니다.

import typing
from abc import ABC, abstractmethod

T = typing.TypeVar('T', bound='Parent') # use string

class Parent(ABC):
    @abstractmethod
    def method(self: T) -> T:
        ...

class Child1(Parent):
    def method(self: T) -> T:
        return self

    def other_method(self):
        pass

class GrandChild1(Child1):
    def other_method_2(self):
        pass

reveal_type(Child1().method())
reveal_type(GrandChild1().method())

그리고 mypy우리에게 :

test_typing.py:22: note: Revealed type is 'test_typing.Child1*'
test_typing.py:23: note: Revealed type is 'test_typing.GrandChild1*'

이 작업을 수행하려면 type-variables를 계속 사용해야했기 때문에 원래 자식 클래스 주석에서 실제 자식 클래스를 사용하려고했을 때 (잘못된?) 손자 유형을 상속했습니다.

class Child1(Parent):
    def method(self) -> Child1:
        return self

나는 mypy와 함께 얻을 것입니다.

test_typing.py:22: note: Revealed type is 'test_typing.Child1'
test_typing.py:23: note: Revealed type is 'test_typing.Child1'

다시 말하지만 이것이 예상 / 올바른 동작인지 확실하지 않습니다. mypy 문서는 현재 경고가 있습니다 :

이 기능은 실험적입니다. 자체 인수에 대한 유형 주석으로 코드를 확인하는 것은 아직 완전히 구현되지 않았습니다. Mypy는 유효한 코드를 허용하지 않거나 안전하지 않은 코드를 허용 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

함수 반환 유형이 부모 클래스 일 때 자식 클래스의 개체를 반환하는 방법은 무엇입니까?

분류에서Dev

Android에서 클래스 유형별로 자식 요소 반환

분류에서Dev

메서드 서명을 재정의하지 않고 자식 클래스에서 메서드의 반환에 대한 Python 재정의 유형 힌트

분류에서Dev

Web API Action 메서드가 부모 클래스를 캐스팅 한 후에도 자식 속성의 Json을 반환하는 이유

분류에서Dev

Mustinherit 클래스에서 자체 유형 반환-VB.NET

분류에서Dev

TypeScript 자식 클래스 : 부모 클래스에 정의 된 메서드의 인수 유형 및 반환 유형을 설정하는 방법

분류에서Dev

자바 : 자체 하위 클래스를 확장하는 클래스의 유형 매개 변수

분류에서Dev

자식 클래스의 개체를 반환하는 일반 게터

분류에서Dev

속성 유형을 자식 클래스의 하위 클래스로 변경

분류에서Dev

제네릭 형식의 클래스를 반환하는 방법

분류에서Dev

Python : 클래스 변수를 유형 힌트하는 방법?

분류에서Dev

자식 유형을 사용하여 부모 클래스의 개체 초기화

분류에서Dev

클래스 컴플렉스의 값 유형 또는 클래스 자체

분류에서Dev

변수 형식을 사용하여 자식 클래스를 부모로 캐스팅

분류에서Dev

형식 인수를 사용하여 개체를 클래스로 C # 캐스팅

분류에서Dev

Typescript 부모 클래스 메서드는 자식 속성에 의한 유형 변경을 반환합니다.

분류에서Dev

리플렉션을 통해 검색된 객체를 문자열로 변환 (여러 클래스 유형을 반복하는 방법은 무엇입니까?)

분류에서Dev

클래스 이름의 유형 또는 문자열 형식에서 클래스의 클래스 인스턴스를 얻는 방법

분류에서Dev

연산자의 후행 반환 유형 * 템플릿 클래스

분류에서Dev

C ++ 클래스 템플릿 복사 생성자 반환 유형

분류에서Dev

자바 템플릿 템플릿 유형으로 함수 매개 변수 클래스 유형 인스턴스를 반환하는 방법

분류에서Dev

java Generics-자식 클래스 유형과 수퍼 클래스를 알고있는 자식 오버로드 된 메서드를 호출하는 방법

분류에서Dev

자식 클래스의 생성자를 사용하여 부모 클래스 개체를 인스턴스화 할 수있는 이유는 무엇입니까?

분류에서Dev

클래스 생성자의 반환 유형을 지정하는 방법 (예 : 프록시 사용)?

분류에서Dev

형식화 된 객체 배열을 반환하는 클래스 toString () 메서드

분류에서Dev

일반 생성자는 유형 T의 클래스 객체를 가져 와서 T를 반환합니다. 이번에는 T가 목록입니다.

분류에서Dev

형제 자식 클래스를 통해 반복

분류에서Dev

부모 클래스에 유형이 지정된 동안 Jackson에서 유형 속성없이 자식 클래스를 deserialize하는 방법

분류에서Dev

클래스 바인딩을 기반으로 다른 유형의 개체를 만드는 단일 공급자

Related 관련 기사

  1. 1

    함수 반환 유형이 부모 클래스 일 때 자식 클래스의 개체를 반환하는 방법은 무엇입니까?

  2. 2

    Android에서 클래스 유형별로 자식 요소 반환

  3. 3

    메서드 서명을 재정의하지 않고 자식 클래스에서 메서드의 반환에 대한 Python 재정의 유형 힌트

  4. 4

    Web API Action 메서드가 부모 클래스를 캐스팅 한 후에도 자식 속성의 Json을 반환하는 이유

  5. 5

    Mustinherit 클래스에서 자체 유형 반환-VB.NET

  6. 6

    TypeScript 자식 클래스 : 부모 클래스에 정의 된 메서드의 인수 유형 및 반환 유형을 설정하는 방법

  7. 7

    자바 : 자체 하위 클래스를 확장하는 클래스의 유형 매개 변수

  8. 8

    자식 클래스의 개체를 반환하는 일반 게터

  9. 9

    속성 유형을 자식 클래스의 하위 클래스로 변경

  10. 10

    제네릭 형식의 클래스를 반환하는 방법

  11. 11

    Python : 클래스 변수를 유형 힌트하는 방법?

  12. 12

    자식 유형을 사용하여 부모 클래스의 개체 초기화

  13. 13

    클래스 컴플렉스의 값 유형 또는 클래스 자체

  14. 14

    변수 형식을 사용하여 자식 클래스를 부모로 캐스팅

  15. 15

    형식 인수를 사용하여 개체를 클래스로 C # 캐스팅

  16. 16

    Typescript 부모 클래스 메서드는 자식 속성에 의한 유형 변경을 반환합니다.

  17. 17

    리플렉션을 통해 검색된 객체를 문자열로 변환 (여러 클래스 유형을 반복하는 방법은 무엇입니까?)

  18. 18

    클래스 이름의 유형 또는 문자열 형식에서 클래스의 클래스 인스턴스를 얻는 방법

  19. 19

    연산자의 후행 반환 유형 * 템플릿 클래스

  20. 20

    C ++ 클래스 템플릿 복사 생성자 반환 유형

  21. 21

    자바 템플릿 템플릿 유형으로 함수 매개 변수 클래스 유형 인스턴스를 반환하는 방법

  22. 22

    java Generics-자식 클래스 유형과 수퍼 클래스를 알고있는 자식 오버로드 된 메서드를 호출하는 방법

  23. 23

    자식 클래스의 생성자를 사용하여 부모 클래스 개체를 인스턴스화 할 수있는 이유는 무엇입니까?

  24. 24

    클래스 생성자의 반환 유형을 지정하는 방법 (예 : 프록시 사용)?

  25. 25

    형식화 된 객체 배열을 반환하는 클래스 toString () 메서드

  26. 26

    일반 생성자는 유형 T의 클래스 객체를 가져 와서 T를 반환합니다. 이번에는 T가 목록입니다.

  27. 27

    형제 자식 클래스를 통해 반복

  28. 28

    부모 클래스에 유형이 지정된 동안 Jackson에서 유형 속성없이 자식 클래스를 deserialize하는 방법

  29. 29

    클래스 바인딩을 기반으로 다른 유형의 개체를 만드는 단일 공급자

뜨겁다태그

보관