<p>谢谢你们的回答。两人都帮助我找到了一个合适的方法来满足我的要求。在</p>
<p>我对这个问题的最终解决办法是:</p>
<pre><code>def ExposedMethod(decoratedFunction):
decoratedFunction.isExposed = True
return decoratedFunction
class RegisterExposedMethods (object):
def __init__(self, decoratedClass, registry):
self._decoratedClass = decoratedClass
for name, f in vars(self._decoratedClass).iteritems():
if hasattr(f, "isExposed"):
registry.addComponentClassToComponentFunction(name, self._decoratedClass.__name__)
# cloak us as the original class
self.__class__.__name__ = decoratedClass.__name__
def __call__(self,*__args,**__kw):
return self._decoratedClass(*__args,**__kw)
def __getattr__(self, name):
return getattr(self._decoratedClass, name)
</code></pre>
<p>对于要从中公开方法的类,我执行以下操作:</p>
^{2}$
<p>类装饰器现在很容易被子类化。下面是一个例子:</p>
<pre><code>class DiscoveryRegisterExposedMethods (RegisterExposedMethods):
def __init__(self, decoratedClass):
RegisterExposedMethods.__init__(self,
decoratedClass,
DiscoveryFunctionRegistry())
</code></pre>
<p>亚历克斯的评论是这么说的</p>
<blockquote>
<p>Your ExposedMethod instances do not behave as normal instance methods ...</p>
</blockquote>
<p>不再是真的,因为方法只是被标记而不是包装。在</p>