而明確的記錄調用(或記錄裝飾,如warwaruk建議)是最直接的方法,它可以自動記錄,如果你願意發揮命名技巧,例如通過Foo
實施邏輯foo
方法。 Python是區分大小寫的,所以它們是分離的和獨特的。然後實施__getattr__
方法,像這樣:
class AutoLogger(object):
def __getattr__(self, attr):
try:
return self.__class__.__dict__[attr]
except KeyError:
func = self.__class__.__dict__[attr.capitalize()]
return lambda *args, **kwargs: self.log_call(attr, func, *args, **kwargs)
def log_call(self, func_name, func, *args, **kwargs):
func(self, *args, **kwargs)
print func_name, 'has been called (handled by', func_name.capitalize() + ')'
class BigAutoLoggerClass(AutoLogger):
def Foo(self):
print 'calling Foo'
b = BigAutoLoggerClass()
b.Foo()
print "---"
b.foo()
這產生了:
calling Foo
---
calling Foo
foo has been called (handled by Foo)
bar
將類似地由Bar
來實現,等等。
如果您不喜歡這個輕微的命名,也可以通過sys.settrace()
函數自動記錄日誌。但是,這增加了很多運行時間開銷,並且僅適用於調試或低(ish)性能不錯的情況。
你可能想'對象'和'富',而不是'對象'和'富'。 –