Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1. from collections import defaultdict
  2. import pprint
  3.  
  4.  
  5. class AutoNamed(object):
  6. _name_counter = defaultdict(list)
  7.  
  8. @classmethod
  9. def clear(cls):
  10. cls._name_counter.clear()
  11.  
  12. @classmethod
  13. def get(cls, name, value=None):
  14. lst = cls._name_counter.get(name)
  15. if lst:
  16. return lst[0] # the fist has exact the name
  17. else:
  18. return value
  19.  
  20. def assign_suggest_name(self, name):
  21. cls = self.__class__
  22. if name is None:
  23. name = cls.__name__
  24. if name in cls._name_counter:
  25. while True:
  26. name_attempt = '{}-{}'.format(name,
  27. len(cls._name_counter[name]))
  28. if name_attempt in cls._name_counter:
  29. cls._name_counter[name].append(
  30. cls._name_counter[name_attempt])
  31. else:
  32. break
  33. name = name_attempt
  34.  
  35. assert name not in cls._name_counter
  36. self.name = name
  37. # each name may have two reference...
  38. cls._name_counter[name].append(self)
  39.  
  40. def __init__(self, name=None):
  41. self.assign_suggest_name(name)
  42.  
  43. _repr_level = 0
  44.  
  45. @property
  46. def _repr_scope(self):
  47. return self.__class__
  48.  
  49. def __repr__(self):
  50. cls = self.__class__
  51. self._repr_scope._repr_level += 1 # in case there is recursive invoke
  52. if self._repr_scope._repr_level > 1 or not callable(getattr(self, 'what', None)):
  53.  
  54. repr_str = '{class_name}(name=\'{name}\')'.format(class_name=cls.__name__,
  55. name=self.name)
  56. else:
  57. repr_str = '{class_name}(name=\'{name}\', what={what})'.format(class_name=cls.__name__,
  58. name=self.name,
  59. what=pprint.pformat(self.what(), width=8))
  60. self._repr_scope._repr_level -= 1
  61. return repr_str
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement