您可以使用元类和
getattribute
动态地修饰所有方法(如果您使用的是Python 2,请确保从
object!
继承
子类)。
另一种选择是对类进行修复,例如:
def add_method_call(func, method_name): def replacement(self, *args, **kw): getattr(self, method_name)() return func(self, *args, **kw) return replacementdef change_all_attrs(cls, added_method): for method_name in dir(cls): attr = getattr(cls, method_name) if callable(attr): setattr(cls, method_name, add_method_call(attr, added_method))class animals(object): ...change_all_attrs(animals, '_internalMethod')
这有点草率,
dir()不会在超类中获得任何方法,并且由于简单的
callable(attr)测试,您可能会捕获不想要的属性和其他对象。但这可能对您有用。
如果使用Python
2.7+,则可以使用类装饰器,而不是
change_all_attrs在创建类后调用,但是效果是相同的(除非您必须重写
change_all_attrs以使其成为装饰器)。



