From 37ee39610c3867d52323eea8e29e9e7c010a9c58 Mon Sep 17 00:00:00 2001 From: Caleb Donovick Date: Wed, 31 Jul 2019 17:00:19 -0700 Subject: [PATCH] Add call back to set class name --- hwtypes/adt_meta.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hwtypes/adt_meta.py b/hwtypes/adt_meta.py index 0a65710..a410355 100644 --- a/hwtypes/adt_meta.py +++ b/hwtypes/adt_meta.py @@ -124,6 +124,12 @@ def _fields_cb(cls, idx): ''' return tuple(idx) + def _name_cb(cls, idx): + ''' + Gives subclasses a chance define their name based on their idx. + ''' + return '{}[{}]'.format(cls.__name__, ', '.join(map(lambda t : t.__name__, idx))) + def __getitem__(cls, idx) -> 'BoundMeta': mcs = type(cls) if not isinstance(idx, tp.Iterable): @@ -142,7 +148,7 @@ def __getitem__(cls, idx) -> 'BoundMeta': bases = [cls] bases.extend(b[idx] for b in cls.__bases__ if isinstance(b, BoundMeta)) bases = tuple(bases) - class_name = '{}[{}]'.format(cls.__name__, ', '.join(map(lambda t : t.__name__, idx))) + class_name = cls._name_cb(idx) t = mcs(class_name, bases, {'__module__' : cls.__module__}, fields=idx) mcs._class_cache[cls, idx] = t