我处理没有日志的遗留代码,我正在寻找记录所有方法调用的方法。
是否可以在python中覆盖内置的“对象”?
我尝试了以下代码:
class Foo(object):
def __getattribute__(self,name):
attr = super().__getattribute__(name)
if hasattr(attr, '__call__'):
def newfunc(*args, **kwargs):
print('before calling %s' %attr.__name__)
result = attr(*args, **kwargs)
print('done calling %s' %attr.__name__)
return result
return newfunc
else:
return attr
object = Foo
class Bar():
def myFunc(self, data):
print("myFunc: %s"% data)
bar = Bar()
bar.myFunc(5)
但我的班级Bar不会继承“对象”。
输出:
myFunc: 5
但是,如果我像这样声明我的类Bar,它可以工作:
class Foo(object):
def __getattribute__(self,name):
attr = super().__getattribute__(name)
if hasattr(attr, '__call__'):
def newfunc(*args, **kwargs):
print('before calling %s' %attr.__name__)
result = attr(*args, **kwargs)
print('done calling %s' %attr.__name__)
return result
return newfunc
else:
return attr
object = Foo
class Bar(object):
def myFunc(self, data):
print("myFunc: %s"% data)
bar = Bar()
bar.myFunc(5)
输出:
before calling myFunc
myFunc: 5
done calling myFunc
默认的“对象”无法覆盖?这里发生了什么?
也许你知道一个更好的解决方案?
感谢您的帮助:)