class Foo(object):
bar = {'a': None, 'b': None}
def do_something(self):
print self.bar['a']
self.bar['a'] = 12
what I'd like to do is:
when read from
self.bar[xxx]
, I get the real valuewhen write to
self.bar[xxx]
, call a setter to do the real setting.
Here is a real world example:
class VoteMixin(object):
self._vote_nums = {'up': None, 'down': None}
def fetch_from_db(self):
self._vote_nums = {} # set with values read from db
@property
def up_vote_nums(self):
if self._vote_nums['up'] is None:
self.fetch_from_db()
return self._vote_nums['up']
@property
def down_vote_nums(self):
# the same
pass
def up_vote(self):
# update to db
if self.vote_nums['up'] is None:
self.fetch_from_db()
self._vote_nums['up'] += 1
def down_vote(self):
# update to db
if self.vote_nums['down'] is None:
self.fetch_from_db()
self._vote_nums['down'] += 1
the problem is, I don't want to check if self._vote_nums['up or down']
is None each time I want to write to it.