Advertisement
Guest User

Untitled

a guest
May 4th, 2015
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. def add_getter(cls, attr, func_name):
  2. ''' "Monkey-patch" in a getter method to access a mangled attribute;
  3.  
  4. add_getter(cls, '__attr', 'fn') is equivalent to "cls.fn = lambda self: self.__attr"'''
  5. from compiler.misc import mangle
  6. assert attr.startswith("__")
  7. def _getter(self): return getattr(self, mangle(attr, cls.__name__))
  8. setattr(cls, func_name, _getter)
  9.  
  10. def add_setter(cls, attr, func_name):
  11. ''' "Monkey-patch" in a setter method to set a mangled attribute;
  12.  
  13. add_setter(cls, '__attr', 'fn') is equivalent to "cls.fn = lambda self: self.__attr"'''
  14. from compiler.misc import mangle
  15. assert attr.startswith("__")
  16. def _setter(self, val): setattr(self, mangle(attr, cls.__name__), val)
  17. setattr(cls, func_name, _setter)
  18.  
  19. # Usage examples
  20. import pyparsing as pyp
  21.  
  22. add_getter(pyp.ParseResults, '__tokdict', 'get_tokdict')
  23. add_setter(pyp.ParseResults, '__tokdict', 'set_tokdict')
  24.  
  25. element = <some pyparsing Element>
  26. results = element.parseString(some_string)
  27.  
  28. print(results.__tokdict) # Fails, obviously
  29. print(results.get_tokdict()) # Succeeds
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement