python - Access a parent class' property getter from the child class -


i'm attempting set test caching tool in cache based on function object , arguments. test, need access exact function being called in property, , can't figure out how this.

the caching code looks this:

def cached(func):     """     decorator cache function calls     """      @wraps(func)     def wrapper(self, *args):         # cache lives in instance gets garbage collected         if (func, args) not in self._cache:             self._cache[(func, args)] = func(self, *args)         return self._cache[(func, args)]      return wrapper 

and have cached property:

class spatialmixin(object):     @property     @cached     def longitude_extrema(self):         return 25 

the class looks this:

class mainclass(someotherbaseclass,spatialmixin):     pass  myobject = mainclass() 

i can access base_class.spatialmixin.longitude_extrema.fget directly, different object myobject.longitude_extrema.fget (which i'm using indicate getter of property; can't access way because myobject.longitude_extrema number 25).

so, how can access function underlying myobject.longitude_extrema property?

if you're trying access original longitude_extrema function, you're not finding through fget because original longitude_extrema function isn't getter. wrapper function created in cached decorator getter.

on python 3.4+, wrapper decorated functools.wraps has __wrapped__ attribute pointing function wraps. can use access original longitude_extrema. (this attribute exists on 3.2 , 3.3, buggy behavior.)

on python 2, functools.wraps doesn't set __wrapped__. while it's technically possible @ wrapped function anyway direct closure manipulation, it's awkward, variable-name-dependent, , not option, since control decorator. set __wrapped__ in cached decorator.


Comments

Popular posts from this blog

java - UnknownEntityTypeException: Unable to locate persister (Hibernate 5.0) -

python - ValueError: empty vocabulary; perhaps the documents only contain stop words -

ubuntu - collect2: fatal error: ld terminated with signal 9 [Killed] -