2727
2828from moretools import cached
2929
30- from modeled . tuple import tuple as mtuple
30+ import modeled
3131from . import typed
3232
3333
3434class Type (typed .base .type ):
3535 __module__ = 'modeled'
3636
3737 @cached
38- def __getitem__ (cls , mtypes ):
39- return typed .base .type .__getitem__ (cls , mtuple [mtypes ])
38+ def __getitem__ (cls , types ):
39+ keytype , valuetype = types
40+ return typed .base .type .__getitem__ (
41+ cls , modeled .tuple [keytype , valuetype ])
42+
43+ @property
44+ def itemtype (cls ):
45+ return cls .mtype
46+
47+ @property
48+ def keytype (cls ):
49+ return cls .mtype .mtypes [0 ]
50+
51+ @property
52+ def valuetype (cls ):
53+ return cls .mtype .mtypes [1 ]
4054
4155Type .__name__ = 'dict.type'
4256
@@ -45,11 +59,15 @@ class dict(with_metaclass(Type, typed.base, builtins.dict)):
4559 __module__ = 'modeled'
4660
4761 @property
48- def mkeytype (self ):
62+ def itemtype (self ):
63+ return self .mtype
64+
65+ @property
66+ def keytype (self ):
4967 return self .mtype .mtypes [0 ]
5068
5169 @property
52- def mvaluetype (self ):
70+ def valuetype (self ):
5371 return self .mtype .mtypes [1 ]
5472
5573 def __init__ (self , iterable = ()):
@@ -66,19 +84,19 @@ def __init__(self, iterable=()):
6684 self .update (items )
6785
6886 def __setitem__ (self , key , value ):
69- if not isinstance (key , self .mkeytype ):
70- key = self .mkeytype (key )
71- if not isinstance (value , self .mvaluetype ):
72- value = self .mvaluetype (value )
87+ if not isinstance (key , self .keytype ):
88+ key = self .keytype (key )
89+ if not isinstance (value , self .valuetype ):
90+ value = self .valuetype (value )
7391 builtins .dict .__setitem__ (self , key , value )
7492
7593 def update (self , iterable ):
7694 def items ():
7795 for key , value in iterable :
78- if isinstance (key , self .mkeytype ):
79- key = self .mkeytype (key )
80- if isinstance (value , self .mvaluetype ):
81- value = self .mvaluetype (value )
96+ if isinstance (key , self .keytype ):
97+ key = self .keytype (key )
98+ if isinstance (value , self .valuetype ):
99+ value = self .valuetype (value )
82100 yield (key , value )
83101
84102 builtins .dict .update (self , items ())
0 commit comments