def run_once(method):
    """Simple memoizing of accessor methods that take no arguments"""

    cache_prop = '__%s_cached' % method.func_name
    def wrapped(self):
        try:
            return getattr(self, cache_prop)
        except AttributeError:
            val = method(self)
            setattr(self, cache_prop, val)
            return val

    return wrapped