我试图锻炼一种方法,使我的班级中的属性不可变。这就是我的想法,它似乎有效。但是可以接受吗?
感觉就像是黑客,或者可能有不同的方法来实现这一目标。这可以接受吗?如何才能实现这一目标呢?
class RankCalculator():
def __init__(self, votesup=None, votesdown=None):
self.__dict__['votesup'] = max(votesup, 0)
self.__dict__['votesdown'] = max(votesdown, 0)
def __setattr__(self, name, value):
"""
Object state cannot be modified after it is created
"""
raise TypeError('objects are immutable')
@property
def score(self):
return float(self._score())
为简洁起见,省略了 self._score()
。