【发布时间】:2015-05-02 16:35:24
【问题描述】:
假设我的班级已经有 __getattr__ 和 __setattr__ 像这样:
def __getattr__(self, attr):
return _global_user_data[self.userid][attr]
def __setattr__(self, attr, value):
_global_user_data[self.userid][attr] = value
我想让玩家的金币(例如)不会低于零。 这是它的设置器:
def gold(self, value):
if value < 0:
raise ValueError
self.__setattr__('gold', value)
但是,我发现编写一个除了调用 self.__getattr__('gold') 之外什么都不做的 getter 是愚蠢的,有没有办法做到这一点,所以我不需要在这里定义其他方法?
这不仅仅是一个属性(在这个例子中是黄金),我有多个属性,而 getter 似乎只是一些额外的工作。
【问题讨论】:
-
为什么要将每个对象的数据存储在全局字典而不是对象本身中?
-
@chepner 我正在继承一个玩家类,它基本上只是游戏本身的玩家包装器(我正在为游戏创建一个额外的插件),这个玩家类我当您需要访问播放器的数据时,始终接收一个新实例来使用子类化。所以我不能在实例中存储我的模组的金币等,因为实例总是不同的。
标签: python python-3.x properties