擅长:python、mysql、java
<p>你也可以定义一个包含所有动物声音的列表。。。i、 e</p>
<pre><code> ANIMAL_SOUNDS = ['moo', 'squawk'..]
</code></pre>
<p>这样你就不用定义新方法了。
用它来说话,比如:</p>
<pre><code>def speak(self):
return ANIMAL_SOUNDS[self.animal_type]
</code></pre>
<p>编辑:</p>
<p>正是出于这个原因,我花了一点时间,用纯python编写了这段代码,这段代码可能与您想要的非常接近:</p>
<pre><code>ANIMAL_TYPES = ('cow', 'african swallow', 'dog')
ANIMAL_TYPE_CHOICES = tuple(enumerate(ANIMAL_TYPES, start=1))
class Animal(object):
def __init__(self, *args, **kwargs):
self.choose_speak = {i: getattr(self, 'speak_{}'.format(
name.replace(' ', '_'))) for (i, name) in ANIMAL_TYPE_CHOICES}
animal_type = 1
def speak_cow(self):
return 'moo'
def speak_african_swallow(self):
return 'squawk'
def speak_dog(self):
return 'woof'
def speak(self):
return self.choose_speak[self.animal_type]()
animal = Animal()
animal.speak()
</code></pre>
<p>注意:重写模型的<code>__init__</code>不是Django的最佳实践,如<a href="https://docs.djangoproject.com/en/1.7/ref/models/instances/#creating-objects" rel="nofollow">here</a>所示:</p>