Python类属性设置器
我想做的是:Python类属性设置器,python,Python,我想做的是: 从self.bar[xxx]读取时,我得到了实际值 当写入self.bar[xxx]时,调用setter进行真正的设置 下面是一个现实世界的例子: class Foo(object): bar = {'a': None, 'b': None} def do_something(self): print self.bar['a'] self.bar['a'] = 12 问题是,我不想检查self.\u vote_nums['up
self.bar[xxx]
读取时,我得到了实际值self.bar[xxx]
时,调用setter进行真正的设置class Foo(object):
bar = {'a': None, 'b': None}
def do_something(self):
print self.bar['a']
self.bar['a'] = 12
问题是,我不想检查
self.\u vote_nums['up or down']
在每次我想写它的时候都是空的。那么bar
就不需要是dict
。使用@property
:等等,我刚刚意识到你想要密钥访问。。。嗯……或者编写一个set\u bar
函数,将键和值传递给它。根据您的示例,这是不合逻辑的,一个真实世界的用例可能会有所帮助。@jozzas我已经用一个真实世界的示例Duplicate更新了:显然,因为它已经用回答者创建的@uberProperty
回答了。
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