Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def add_getter(cls, attr, func_name):
- ''' "Monkey-patch" in a getter method to access a mangled attribute;
- add_getter(cls, '__attr', 'fn') is equivalent to "cls.fn = lambda self: self.__attr"'''
- from compiler.misc import mangle
- assert attr.startswith("__")
- def _getter(self): return getattr(self, mangle(attr, cls.__name__))
- setattr(cls, func_name, _getter)
- def add_setter(cls, attr, func_name):
- ''' "Monkey-patch" in a setter method to set a mangled attribute;
- add_setter(cls, '__attr', 'fn') is equivalent to "cls.fn = lambda self: self.__attr"'''
- from compiler.misc import mangle
- assert attr.startswith("__")
- def _setter(self, val): setattr(self, mangle(attr, cls.__name__), val)
- setattr(cls, func_name, _setter)
- # Usage examples
- import pyparsing as pyp
- add_getter(pyp.ParseResults, '__tokdict', 'get_tokdict')
- add_setter(pyp.ParseResults, '__tokdict', 'set_tokdict')
- element = <some pyparsing Element>
- results = element.parseString(some_string)
- print(results.__tokdict) # Fails, obviously
- print(results.get_tokdict()) # Succeeds
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement