Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8c6aaf3

Browse files
committed
Merge pull request#195 from python/new_generic
Revamped generic class behavior to conform to updated PEP 484
2 parentsbaf2d91 +e0d1c5d commit8c6aaf3

File tree

5 files changed

+503
-306
lines changed

5 files changed

+503
-306
lines changed

‎python2/test_typing.py‎

Lines changed: 100 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ def test_basic_constrained(self):
132132
deftest_constrained_error(self):
133133
withself.assertRaises(TypeError):
134134
X=TypeVar('X',int)
135+
X
135136

136137
deftest_union_unique(self):
137138
X=TypeVar('X')
@@ -316,6 +317,7 @@ def test_union_instance_type_error(self):
316317
deftest_union_str_pattern(self):
317318
# Shouldn't crash; see http://bugs.python.org/issue25390
318319
A=Union[str,Pattern]
320+
A
319321

320322

321323
classTypeVarUnionTests(TestCase):
@@ -478,7 +480,7 @@ def get(self, key, default=None):
478480
pass
479481

480482

481-
classMySimpleMapping(SimpleMapping):
483+
classMySimpleMapping(SimpleMapping[XK,XV]):
482484

483485
def__init__(self):
484486
self.store= {}
@@ -533,14 +535,17 @@ def test_protocol_instance_type_error(self):
533535
classGenericTests(TestCase):
534536

535537
deftest_basics(self):
536-
X=SimpleMapping[unicode,Any]
537-
Y=SimpleMapping[XK,unicode]
538-
X[unicode,unicode]
539-
Y[unicode,unicode]
538+
X=SimpleMapping[str,Any]
539+
assertX.__parameters__== ()
540+
withself.assertRaises(TypeError):
541+
X[unicode]
540542
withself.assertRaises(TypeError):
541-
X[int,unicode]
543+
X[unicode,unicode]
544+
Y=SimpleMapping[XK,unicode]
545+
assertY.__parameters__== (XK,)
546+
Y[unicode]
542547
withself.assertRaises(TypeError):
543-
Y[unicode,bytes]
548+
Y[unicode,unicode]
544549

545550
deftest_init(self):
546551
T=TypeVar('T')
@@ -552,9 +557,33 @@ def test_init(self):
552557

553558
deftest_repr(self):
554559
self.assertEqual(repr(SimpleMapping),
555-
__name__+'.'+'SimpleMapping[~XK, ~XV]')
560+
__name__+'.'+'SimpleMapping<~XK, ~XV>')
556561
self.assertEqual(repr(MySimpleMapping),
557-
__name__+'.'+'MySimpleMapping[~XK, ~XV]')
562+
__name__+'.'+'MySimpleMapping<~XK, ~XV>')
563+
564+
deftest_chain_repr(self):
565+
T=TypeVar('T')
566+
S=TypeVar('S')
567+
568+
classC(Generic[T]):
569+
pass
570+
571+
X=C[Tuple[S,T]]
572+
assertX==C[Tuple[S,T]]
573+
assertX!=C[Tuple[T,S]]
574+
575+
Y=X[T,int]
576+
assertY==X[T,int]
577+
assertY!=X[S,int]
578+
assertY!=X[T,str]
579+
580+
Z=Y[str]
581+
assertZ==Y[str]
582+
assertZ!=Y[int]
583+
assertZ!=Y[T]
584+
585+
assertstr(Z).endswith(
586+
'.C<~T>[typing.Tuple[~S, ~T]]<~S, ~T>[~T, int]<~T>[str]')
558587

559588
deftest_dict(self):
560589
T=TypeVar('T')
@@ -609,20 +638,20 @@ class C(Generic[T]):
609638
assertC.__module__==__name__
610639
ifnotPY32:
611640
assertC.__qualname__=='GenericTests.test_repr_2.<locals>.C'
612-
assertrepr(C).split('.')[-1]=='C[~T]'
641+
assertrepr(C).split('.')[-1]=='C<~T>'
613642
X=C[int]
614643
assertX.__module__==__name__
615644
ifnotPY32:
616645
assertX.__qualname__=='C'
617-
assertrepr(X).split('.')[-1]=='C[int]'
646+
assertrepr(X).split('.')[-1]=='C<~T>[int]'
618647

619648
classY(C[int]):
620649
pass
621650

622651
assertY.__module__==__name__
623652
ifnotPY32:
624653
assertY.__qualname__=='GenericTests.test_repr_2.<locals>.Y'
625-
assertrepr(Y).split('.')[-1]=='Y[int]'
654+
assertrepr(Y).split('.')[-1]=='Y'
626655

627656
deftest_eq_1(self):
628657
assertGeneric==Generic
@@ -650,10 +679,40 @@ class A(Generic[T, VT]):
650679
classB(Generic[KT,T]):
651680
pass
652681

653-
classC(A,Generic[KT,VT],B):
682+
classC(A[T,VT],Generic[VT,T,KT],B[KT,T]):
654683
pass
655684

656-
assertC.__parameters__== (T,VT,KT)
685+
assertC.__parameters__== (VT,T,KT)
686+
687+
deftest_nested(self):
688+
689+
G=Generic
690+
691+
classVisitor(G[T]):
692+
693+
a=None
694+
695+
defset(self,a):
696+
self.a=a
697+
698+
defget(self):
699+
returnself.a
700+
701+
defvisit(self):
702+
returnself.a
703+
704+
V=Visitor[typing.List[int]]
705+
706+
classIntListVisitor(V):
707+
708+
defappend(self,x):
709+
self.a.append(x)
710+
711+
a=IntListVisitor()
712+
a.set([])
713+
a.append(1)
714+
a.append(42)
715+
asserta.get()== [1,42]
657716

658717
deftest_type_erasure(self):
659718
T=TypeVar('T')
@@ -679,6 +738,24 @@ def foo(x):
679738

680739
foo(42)
681740

741+
deftest_implicit_any(self):
742+
T=TypeVar('T')
743+
744+
classC(Generic[T]):
745+
pass
746+
747+
classD(C):
748+
pass
749+
750+
assertD.__parameters__== ()
751+
752+
withself.assertRaises(Exception):
753+
D[int]
754+
withself.assertRaises(Exception):
755+
D[Any]
756+
withself.assertRaises(Exception):
757+
D[T]
758+
682759

683760
classVarianceTests(TestCase):
684761

@@ -988,6 +1065,15 @@ def test_basics(self):
9881065
assertEmp._fields== ('name','id')
9891066
assertEmp._field_types==dict(name=str,id=int)
9901067

1068+
deftest_pickle(self):
1069+
globalEmp# pickle wants to reference the class by name
1070+
Emp=NamedTuple('Emp', [('name',str), ('id',int)])
1071+
jane=Emp('jane',37)
1072+
forprotoinrange(pickle.HIGHEST_PROTOCOL+1):
1073+
z=pickle.dumps(jane,proto)
1074+
jane2=pickle.loads(z)
1075+
self.assertEqual(jane2,jane)
1076+
9911077

9921078
classIOTests(TestCase):
9931079

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp