<p>我已经用元类解决了这个问题</p>
<p>使用元类允许<code>BaseHandler</code>的实现者确保所有子类都将调用超类<code>prepare()</code>,而不需要调整任何现有代码</p>
<p>元类在两个类上查找<code>prepare</code>的实现,然后用调用<code>superclass.prepare</code>的子类prepare覆盖子类prepare,该子类后跟<code>subclass.prepare</code></p>
<pre><code>class MetaHandler(type):
def __new__(cls, name, bases, attrs):
instance = type.__new__(cls, name, bases, attrs)
super_instance = super(instance, instance)
if hasattr(super_instance, 'prepare') and hasattr(instance, 'prepare'):
super_prepare = getattr(super_instance, 'prepare')
sub_prepare = getattr(instance, 'prepare')
def new_prepare(self):
super_prepare(self)
sub_prepare(self)
setattr(instance, 'prepare', new_prepare)
return instance
class BaseHandler(object):
__metaclass__ = MetaHandler
def prepare(self):
print 'BaseHandler.prepare'
class SubHandler(BaseHandler):
def prepare(self):
print 'SubHandler.prepare'
</code></pre>
<p>使用它看起来像这样:</p>
<pre><code>>>> sh = SubHandler()
>>> sh.prepare()
BaseHandler.prepare
SubHandler.prepare
</code></pre>