Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6ebb169

Browse files
committed
fix exdict inheritance
1 parent 010aff5 commit 6ebb169

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

lib/matplotlib/traitlets.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,41 @@
2323
from .transforms import IdentityTransform, Transform
2424
import contextlib
2525

26+
2627
class exdict(dict):
2728

2829
def __init__(self, *args, **kwargs):
2930
super(exdict, self).__init__(*args, **kwargs)
3031
self._memory = dict()
3132

32-
def __setitem__(self, key, value):
33+
def __setitem__(self, key, new):
3334
try:
3435
old = self[key]
3536
except KeyError:
36-
old = self._default_method(key)
37-
38-
self._memory[key] = old
39-
super(exdict, self).__setitem__(key, value)
37+
old = self._default_generator(key)
38+
if old != new:
39+
self._memory[key] = old
40+
super(exdict, self).__setitem__(key, new)
41+
42+
def update(self, *args, **kwargs):
43+
if len(args) > 1:
44+
raise TypeError("update expected at most 1 arguments, got %d" % len(args))
45+
other = dict(*args, **kwargs)
46+
for key in other:
47+
self[key] = other[key]
48+
49+
def setdefault(self, key, value=None):
50+
if key not in self:
51+
self[key] = self._default_generator()
52+
return self[key]
4053

4154
def ex(self, key):
42-
return self._memory.get(key,self[key])
55+
try:
56+
return self._memory[key]
57+
except KeyError, e:
58+
return self._default_generator(key)
4359

44-
def _default_method(self, key): pass
60+
def _default_generator(self, key): pass
4561

4662

4763
class PrivateMethodMixin(object):
@@ -50,7 +66,7 @@ def __new__(cls, *args, **kwargs):
5066
inst = super(PrivateMethodMixin,cls).__new__(cls, *args, **kwargs)
5167
inst._trait_values = exdict(inst._trait_values)
5268
meth = lambda klass, key: getattr(klass, key).default_value
53-
inst._trait_values._default_method = MethodType(meth, cls)
69+
inst._trait_values._default_generator = MethodType(meth, cls)
5470
return inst
5571

5672
def force_callback(self, name, cross_validate=True):

0 commit comments

Comments
 (0)