17
17
18
18
19
19
class TransformDict (MutableMapping ):
20
- ''' Dictionary that calls a transformation function when looking
20
+ """ Dictionary that calls a transformation function when looking
21
21
up keys, but preserves the original keys.
22
22
23
23
>>> d = TransformDict(str.lower)
@@ -26,18 +26,18 @@ class TransformDict(MutableMapping):
26
26
True
27
27
>>> set(d.keys())
28
28
{'Foo'}
29
- '''
29
+ """
30
30
31
31
__slots__ = ('_transform' , '_original' , '_data' )
32
32
33
33
def __init__ (self , transform , init_dict = None , ** kwargs ):
34
- ''' Create a new TransformDict with the given *transform* function.
34
+ """ Create a new TransformDict with the given *transform* function.
35
35
*init_dict* and *kwargs* are optional initializers, as in the
36
36
dict constructor.
37
- '''
37
+ """
38
38
if not callable (transform ):
39
- msg = 'expected a callable, got %r'
40
- raise TypeError ( msg % transform .__class__ )
39
+ raise TypeError (
40
+ f'expected a callable, got { transform .__class__ !r } ' )
41
41
self ._transform = transform
42
42
# transformed => original
43
43
self ._original = {}
@@ -48,15 +48,15 @@ def __init__(self, transform, init_dict=None, **kwargs):
48
48
self .update (kwargs )
49
49
50
50
def getitem (self , key ):
51
- ' D.getitem(key) -> (stored key, value)'
51
+ """ D.getitem(key) -> (stored key, value)"""
52
52
transformed = self ._transform (key )
53
53
original = self ._original [transformed ]
54
54
value = self ._data [transformed ]
55
55
return original , value
56
56
57
57
@property
58
58
def transform_func (self ):
59
- "This TransformDict's transformation function"
59
+ """ This TransformDict's transformation function"" "
60
60
return self ._transform
61
61
62
62
# Minimum set of methods required for MutableMapping
@@ -83,22 +83,22 @@ def __delitem__(self, key):
83
83
# Methods overridden to mitigate the performance overhead.
84
84
85
85
def clear (self ):
86
- ' D.clear() -> None. Remove all items from D.'
86
+ """ D.clear() -> None. Remove all items from D."""
87
87
self ._data .clear ()
88
88
self ._original .clear ()
89
89
90
90
def __contains__ (self , key ):
91
91
return self ._transform (key ) in self ._data
92
92
93
93
def get (self , key , default = None ):
94
- ' D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.'
94
+ """ D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None."""
95
95
return self ._data .get (self ._transform (key ), default )
96
96
97
97
def pop (self , key , default = _sentinel ):
98
- ''' D.pop(k[,d]) -> v, remove key and return corresponding value.
98
+ """ D.pop(k[,d]) -> v, remove key and return corresponding value.
99
99
If key is not found, d is returned if given, otherwise
100
100
KeyError is raised.
101
- '''
101
+ """
102
102
transformed = self ._transform (key )
103
103
if default is _sentinel :
104
104
del self ._original [transformed ]
@@ -108,16 +108,16 @@ def pop(self, key, default=_sentinel):
108
108
return self ._data .pop (transformed , default )
109
109
110
110
def popitem (self ):
111
- ''' D.popitem() -> (k, v), remove and return some (key, value) pair
111
+ """ D.popitem() -> (k, v), remove and return some (key, value) pair
112
112
as a 2-tuple; but raise KeyError if D is empty.
113
- '''
113
+ """
114
114
transformed , value = self ._data .popitem ()
115
115
return self ._original .pop (transformed ), value
116
116
117
117
# Other methods
118
118
119
119
def copy (self ):
120
- ' D.copy() -> a shallow copy of D'
120
+ """ D.copy() -> a shallow copy of D"""
121
121
other = self .__class__ (self ._transform )
122
122
other ._original = self ._original .copy ()
123
123
other ._data = self ._data .copy ()
@@ -137,5 +137,4 @@ def __repr__(self):
137
137
except TypeError :
138
138
# Some keys are unhashable, fall back on .items()
139
139
equiv = list (self .items ())
140
- return '%s(%r, %s)' % (self .__class__ .__name__ ,
141
- self ._transform , repr (equiv ))
140
+ return f'{ self .__class__ .__name__ } ({ self ._transform !r} , { equiv !r} )'
0 commit comments