擅长:python、mysql、java
<p>pythonic的方法是使用<code>@property</code>decorator。您可以提供在setter中检查max health的逻辑:</p>
<pre><code>class Monster(object):
def __init__(self, initial_health=20, max_health=20):
# Private property which stores the actual health
self._health = initial_health
self.max_health = 20
@property
def health(self):
return self._health
@health.setter
def health(self, value):
if value > self.max_health:
value = self.max_health
self._health = value
</code></pre>
<p>这样就不能为该值指定大于最大可能值的值:</p>
<pre><code>a = Monster()
assert a == 20 # Intitial value is 20
a.health = 10
assert a == 10 # Changed to 10
a.health = 30
assert a == 20 # we set it to 30 but is capped to 20 max
</code></pre>