<p>这个解决方案产生了我想要的输出:</p>
<pre><code>class ParentObject(object):
def __init__(self):
self._adjust_methods(self.__class__)
def _adjust_methods(self, cls):
for attr, val in cls.__dict__.iteritems():
if callable(val) and not attr.startswith("_"):
setattr(cls, attr, self._smile_warmly(val))
bases = cls.__bases__
for base in bases:
self._adjust_methods(base)
def _smile_warmly(self, the_method):
def _wrapped(self, *args, **kwargs):
print "-smile_warmly - " +self.__name__
the_method(self, *args, **kwargs)
cmethod_wrapped = classmethod(_wrapped)
# cmethod_wrapped.adjusted = True
return cmethod_wrapped
def greetings(self):
print "greetings"
class SonObject(ParentObject):
def hello_son(self):
print "hello son"
def goodbye(self):
print "goodbye son"
class DaughterObject(ParentObject):
def hello_daughter(self):
print "hello daughter"
def goodbye(self):
print "goodbye daughter"
if __name__ == '__main__':
son = SonObject()
son.greetings()
son.hello_son()
son.goodbye()
daughter = DaughterObject()
daughter.greetings()
daughter.hello_daughter()
daughter.goodbye()
</code></pre>
<p>输出为:</p>
<pre><code>-smile_warmly - SonObject
greetings
-smile_warmly - SonObject
hello son
-smile_warmly - SonObject
goodbye son
-smile_warmly - DaughterObject
greetings
-smile_warmly - DaughterObject
hello daughter
-smile_warmly - DaughterObject
goodbye daughter
</code></pre>