8000 Support alias inheritance. · matplotlib/matplotlib@2d66f0f · GitHub
[go: up one dir, main page]

Skip to content

Commit 2d66f0f

Browse files
committed
Support alias inheritance.
1 parent 52c6c77 commit 2d66f0f

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

lib/matplotlib/cbook/__init__.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import six
1212
from six.moves import xrange, zip
1313
import collections
14+
import copy
1415
import datetime
1516
import errno
1617
import functools
@@ -2783,7 +2784,8 @@ class so far, an alias named ``get_alias`` will be defined; the same will
27832784
exception will be raised.
27842785
27852786
The alias map is stored as the ``_alias_map`` attribute on the class and
2786-
can be used by `~.normalize_kwargs`.
2787+
can be used by `~.normalize_kwargs` (which assumes that higher priority
2788+
aliases come last).
27872789
"""
27882790
if cls is None:
27892791
return functools.partial(_define_aliases, alias_d)
@@ -2804,7 +2806,15 @@ def method(self, *args, **kwargs):
28042806
method.__doc__ = "alias for `{}`".format(prefix + prop)
28052807
setattr(cls, prefix + alias, method)
28062808
if not exists:
2807-
raise ValueError("property {} does not exist".format(prop))
2809+
raise ValueError(
2810+
"Neither getter nor setter exists for {!r}".format(prop))
28082811

2809-
cls._alias_map = alias_d
2812+
try:
2813+
# Deepcopy the inherited alias map if any, to avoid modifying the
2814+
# parent class.
2815+
cls._alias_map = copy.deepcopy(cls._alias_map)
2816+
except AttributeError:
2817+
cls._alias_map = {}
2818+
for prop, aliases in alias_d.items():
2819+
cls._alias_map.setdefault(prop, []).extend(aliases)
28102820
return cls

0 commit comments

Comments
 (0)
0