擅长:python、mysql、java
<p>扩展BoppreH的答案,您可以通过在类创建时用正确的方法填充activity dict来消除<code>getattr</code>查找,方法如下:</p>
<pre><code>def generateActions(cls):
cls.actions = {}
for a, f in cls.genactions.items():
cls.actions[a] = getattr(cls, f) if f else lambda *_: None
return cls
</code></pre>
<p>注意,<code>actions</code>是用一个不做任何操作的lambda填充的,如果一个操作的给定值是<code>None</code>,这意味着您可以去掉<code>update</code>中的<code>if callable(...)</code>语句。在</p>
<p>现在只需将decorator添加到类中:</p>
^{pr2}$