Diberikan:

from typing import TypeVar, Generic, Sequence

T = TypeVar("T")

class A(Generic[T]):
    pass

class B(A[Sequence[T]], Generic[T]):
    pass

b: B[int] = B()

reveal_type(b) adalah B[int] seperti yang diharapkan. Apakah ada cara bagi reveal_type untuk memberi tahu saya A[Sequence[int]]?

Dalam contoh sederhana ini, ini tidak berguna, tetapi dalam kasus ini saya men-debug mengetahui bagaimana supertipe diparametrikan dengan diberikan subtipe parametris tanpa harus menghubungkan titik-titik secara manual (dan berpotensi bertentangan dengan apa yang disimpulkan mypy) akan menjernihkan banyak hal banyak.

0
Mario Ishac 20 November 2020, 09:52

1 menjawab

Jawaban Terbaik

Anda bisa menulis pembantu:

def as_a(a: A[T]) -> A[T]:
    return a

reveal_type(as_a(b))

Di taman bermain mypy, ini mengungkapkan main.A[typing.Sequence*[builtins.int*]]. (Tampaknya jenis tanda asterisk disimpulkan selama substitusi variabel tipe.)

2
user2357112 supports Monica 20 November 2020, 06:58