擅长:python、mysql、java
<p>一种可能的解决方案是存储函数名而不是直接引用,并使用<a href="http://docs.python.org/2/library/functions.html#getattr" rel="nofollow">^{<cd1>}</a>检索正确的引用:</p>
<pre><code>actions = {
STATES.IDLE : None ,
STATES.FIRED : 'start_moving',
STATES.MOVING : 'move' ,
STATES.RESET : 'reset' ,
}
[...]
def update(self):
method_name = self.__class__.actions[self.state]
if method_name and callable(getattr(self, method_name)):
getattr(self, method_name)(self)
</code></pre>
<p>对于加速,可以在初始化对象时预先计算此表:</p>
^{pr2}$
<p>请注意,由于<code>__init__</code>中的代码使用<a href="http://docs.python.org/2/library/functions.html#getattr" rel="nofollow">^{<cd1>}</a>,因此可以将其放在<code>Bullet.__init__</code>中,并仅由其他类扩展。正如您已经调用了超级构造函数一样,不需要更改扩展类,甚至不需要对它们进行注释。在</p>