@@ -480,6 +480,102 @@ s: str = a.bar() # E: Incompatible types in assignment (expression has type "in
480
480
481
481
[builtins fixtures/list.pyi]
482
482
483
+
484
+ [case testDataclassUntypedGenericInheritance]
485
+ from dataclasses import dataclass
486
+ from typing import Generic, TypeVar
487
+
488
+ T = TypeVar("T")
489
+
490
+ @dataclass
491
+ class Base(Generic[T]):
492
+ attr: T
493
+
494
+ @dataclass
495
+ class Sub(Base):
496
+ pass
497
+
498
+ sub = Sub(attr=1)
499
+ reveal_type(sub) # N: Revealed type is '__main__.Sub'
500
+ reveal_type(sub.attr) # N: Revealed type is 'Any'
501
+
502
+
503
+ [case testDataclassGenericSubtype]
504
+ from dataclasses import dataclass
505
+ from typing import Generic, TypeVar
506
+
507
+ T = TypeVar("T")
508
+
509
+ @dataclass
510
+ class Base(Generic[T]):
511
+ attr: T
512
+
513
+ S = TypeVar("S")
514
+
515
+ @dataclass
516
+ class Sub(Base[S]):
517
+ pass
518
+
519
+ sub_int = Sub[int](attr=1)
520
+ reveal_type(sub_int) # N: Revealed type is '__main__.Sub[builtins.int*]'
521
+ reveal_type(sub_int.attr) # N: Revealed type is 'builtins.int*'
522
+
523
+ sub_str = Sub[str](attr='ok')
524
+ reveal_type(sub_str) # N: Revealed type is '__main__.Sub[builtins.str*]'
525
+ reveal_type(sub_str.attr) # N: Revealed type is 'builtins.str*'
526
+
527
+
528
+ [case testDataclassGenericInheritance]
529
+ from dataclasses import dataclass
530
+ from typing import Generic, TypeVar
531
+
532
+ T1 = TypeVar("T1")
533
+ T2 = TypeVar("T2")
534
+ T3 = TypeVar("T3")
535
+
536
+ @dataclass
537
+ class Base(Generic[T1, T2, T3]):
538
+ one: T1
539
+ two: T2
540
+ three: T3
541
+
542
+ @dataclass
543
+ class Sub(Base[int, str, float]):
544
+ pass
545
+
546
+ sub = Sub(one=1, two='ok', three=3.14)
547
+ reveal_type(sub) # N: Revealed type is '__main__.Sub'
548
+ reveal_type(sub.one) # N: Revealed type is 'builtins.int*'
549
+ reveal_type(sub.two) # N: Revealed type is 'builtins.str*'
550
+ reveal_type(sub.three) # N: Revealed type is 'builtins.float*'
551
+
552
+
553
+ [case testDataclassMultiGenericInheritance]
554
+ from dataclasses import dataclass
555
+ from typing import Generic, TypeVar
556
+
557
+ T = TypeVar("T")
558
+
559
+ @dataclass
560
+ class Base(Generic[T]):
561
+ base_attr: T
562
+
563
+ S = TypeVar("S")
564
+
565
+ @dataclass
566
+ class Middle(Base[int], Generic[S]):
567
+ middle_attr: S
568
+
569
+ @dataclass
570
+ class Sub(Middle[str]):
571
+ pass
572
+
573
+ sub = Sub(base_attr=1, middle_attr='ok')
574
+ reveal_type(sub) # N: Revealed type is '__main__.Sub'
575
+ reveal_type(sub.base_attr) # N: Revealed type is 'builtins.int*'
576
+ reveal_type(sub.middle_attr) # N: Revealed type is 'builtins.str*'
577
+
578
+
483
579
[case testDataclassGenericsClassmethod]
484
580
# flags: --python-version 3.6
485
581
from dataclasses import dataclass
0 commit comments