【发布时间】:2023-03-19 18:21:01
【问题描述】:
我正在为多个类准备一个父类,从它的角度来看,我需要知道是否调用了特定的实例方法。
我开始做这样的事情:
from collections import defaultdict
class ParentClass:
def __init__(self, ):
self.call_count = defaultdict(int)
def __getattribute__(self, item):
if item != 'call_count':
self.call_count[item] += 1
return object.__getattribute__(self, item)
class ChildClass(ParentClass):
def child_method(self):
pass
不幸的是,call_count 还包括对该字段的访问,但没有调用它:
ob = ChildClass()
ob.child_method()
ob.child_method
assert ob.call_count['child_method'] == 1 # it's 2
我怎样才能从对象实例中检测到它的字段正在被调用(不仅仅是访问)?
【问题讨论】:
标签: python inheritance metaprogramming